dilluns, 14 de novembre de 2011

Crear un motor 3D Multiplataforma - Motor Antagonista [ I ]

Bones.

Començo el meu "diatari" sobre com vaig fent un motor multiplataforma (Linux i Windows i, opcionalment, Android i, opcionalíssimament, iOs).

Aquest motor serà bàsicament una reescriptura del motor que hem fet al màster (mirar entrada anterior), però "ben fet" (no és que digui que el motor que hem fet està mal fet [fet, fet, fet, parèntesi, parèntesi, parèntesi], sinó que, al anar aprenent no teníem la visió de conjunt necessària per fer certes coses, que ara si que tinc).

En aquest projecte em proposo diverses coses, entre elles aprendre C++11 (la raó principal per la que no faci el joc en Java) i distreure'm mentre no trobi feina.

Els objectius principals seran tenir la mateixa funcionalitat que al master, més la capacitat de ser multiplataforma (i alguna millora gràfica gràcies a no dependre del DirectX, visca OpenGL!!).


  • Interfície amb el sistema operatius via SDL 1.3 (té llicència ZLib, la qual em permet fer-ne el que em doni la santa gana).
  • Gràfics 2D via SDL o OpenGL (ES?).
  • Gràfics 3D via OpenGL amb diferents perfils "intercanviables".
    • Perfil bàsic: 1.5 o ES 1.1
    • Perfil normal: 2.0
    • Perfil avançat: 4.2 (3.3? Qui el vol?)
  • Configuració amb fitxers YAML
  • Scripting via LUA (no he aconseguit fer funcionar Boost::Python, ja que té un memory leak gros com ell sol, així que tornem al lua).
  • So via SDL (amb l'ajuda del mixer per llegir "ogg"s. Bass costa 2.700€, així que queda descartat.
  • Física via Bullet (si hi ha temps per fer-la). Sé que n'hi ha d'altres, però ja estic una mica familiaritzat amb Bullet, així que no hi ha d'haver masses problemes al respecte.
  • DCCs Blender i Gimp.
  • D'animacions m'agradaria crear el meu pròpi sistema, però sempre hi ha Cal3D allà per si no me'n surto.
No sé si m'he deixat res, però és igual.

Com a eines uso Mercurial com a control de versions (és distribuit i mola lo suficient) i Eclipse com a IDE.

De moment simplement m'he creat una carpeta a l'Ubuntu controlada amb el Hg (mercurial) de nom "Motor Antagonista" i a dintre hi aniré creant els diferents projectes de l'Eclipse.

Començo per el base.

Nou projecte -> C++ Static Library -> Toolchain "Cross GCC"

A partir d'aqui el primer que faig és retocar les configuracions (botó dret sobre el projecte, propietats al final de tot). Dintre de "C/C++ Build" -> Settings et deixa mirar les configuracions. Per defecte n'hi ha 2: "debug" i "release"; els hi canvio el nom per "GNU|Linux Debug" i "GNU|Linux Release" (per després crear les configuracions corresponents per windows) i n'afegeixo una de nova "Production" (cópia de Release) a Release li engego les opcions de debug (així que queda optimitzada a tope i amb debug, sent una build "intermitja"). També defineixo els símbols "_DEBUG" (per la build de debug) i "NDEBUG" (per la resta), per si de cas. Tot això s'ha de afegir 2 vegades, una a la configuració del "gcc" i l'altra a la del "g++" (les 2 són a "Settings", on he dit abans). Finalment, i per totes les configuracions, afegeixo la opció "-std=c++0x" a la línea de comandes de "g++" per que em compili amb les coses del C++11 (bé, amb les coses "provisionals", ja que encara no tinc la versió de gcc que compila C++11 correctament).

 

Després de fer tot això, em dedico a afegir llibreries.

Creo una carpeta "include" i a dintre i foto tots els arxius de "GLI"[0.3.0.3] i "GLM"[0.9.2.7], trets de http://www.g-truc.net/ (nota: els 2 tenen un "dummy.cpp" que cal esborrar, aquestes llibreries són "només capçaleres" i per tant relativament fàcils de incloure | nota2: GLI té un memory leak. No és molt preocupant i ja he avisat de la seva existència i l'autor diu que a la pròxima versió estarà corregit).

Afegeixo també els includes de "yaml-cpp" i creo una carpeta nova "lib/GNULinux" on hi afegeixo la llibreria estàtica (libyaml-cpp.a). Faig el mateix amb les llibreries de LUA (5.1), de SDL (1.3) i Luabind (0.9.1)** (aquestes embruten considerablement la carpeta "include", espero que això no em passi factura després)*.

Una bona estona me la passo fent "./config; make; make install;", per cert (a veure en windows com ho faig tot això).

Afegeixo per acabar "http://sourceforge.net/projects/nvwa/" i GLEW. Finalment faig una carpeta anomenada "Licences" on vaig copiant totes les llicències per tenir-les controlades.

I de moment això és tot. Després intentaré configurar el Mercurial correctament.

*: Per lua, només cal "lua.h" "lua.hpp" "luaconf.h" "lualib.h" i "lauxlib.h"
**: Per al luabind... és més fàcil passar de "bjam"s i limitar-se a copiar tot el codi a dintre del projecte.

Cap comentari:

Publica un comentari a l'entrada