2021-06-03 – Começo da migração do meu Game Engine em C/C++ para 3D…
“Apenas cubos”, poderão vocês pensar! Mas há muito mais aqui do que imaginam…
Estes cubos são o primeiro passo para a adaptação do meu game engine de 2D para 3D também.
E importantíssimo, a renderização e cálculos 3D, são feitos todos à pata, não usei o OpenGL para nada. Com o OpenGL seria muito mais fácil, pois com ele, podemos desenhar formas, e usar funções dele para rodar objectos, etc.
Aqui é tudo feito do zero à pata.
E porquê 3D? Porque, as simulações de galáxias da NASA são em 3D, e apesar de não ter super computadores, ao menos visualmente hão-de ficar parecidas, por isso tenho de adaptar o meu game engine a 3D, para usar com elas.
“E porquê à pata?” Poderão vocês perguntar, será por ser masoquista?
Ainda por cima porque tive de usar vectores 3D e não apenas 2D, muitas matrizes para cálculo espacial, muita trigonometria, rotações, escalar objectos para aproximações, ângulos de visão, etc (nem tudo está completo ainda).
É que com XY, ou se move e roda em 2D ou não. Em 3D pode rodar de 1001 maneiras diferentes e isso envolve muita Matemática, pois além do XY que roda para um lado ou outro, com 3D roda em mil direcções diferentes, no sentido dos ponteiros do relógio ou invertido, mas na direcção da frente, ou Norte, ou Sul, ou etc, há 1001 combinações (imaginem as formas de rodar um disco de vinyl, que é 2D e só tem duas, e rodar uma esfera, que tem muitas).
Mas porquê à pata?
O desafio é importante, mas tem a ver com outras coisas…
1 – Se usasse o OpenGL, teria de usar depois o OpenGL em todo o game engine, adaptá-lo em 200 e tal ficheiros onde não o uso (por fazer tudo à pata), e isso lixaria o 2º ponto que falo abaixo;
2 – Eu evito usar o OpenGL, porque estou a pensar que talvez um dia possa usar o meu Game Engine para migrar jogos que faça agora, para máquinas antigas, onde não existia o Open GL, como Commodores Amiga, etc. E se fizer à pata, depois posso migrar para elas também!
Há uma possível desvantagem! Não tirarei proveito ao máximo das placas aceleradoras, porque faço a renderização à pata (usando o CPU) e não tanto os chips das gráficas.
Mas como não tenciono criar jogos super pesados em 3D, duvido que vá precisar, e se um dia criar, posso sempre usar para certas coisas.
Mas vou tentar usar as mesmas com cálculos adaptados a usar os chips o mais possível.
Talvez quando isto funcionar e tiver galáxias em 3D, talvez faça uma versão do “Death Chase” do Spectrum para PC, em 3D, para me entreter.
Atenção que o meu objectivo não é imitar o Unity, um motor de jogos super pesado e super completo, que até um asno consegue lá criar jogos.
O meu será o mais leve possível e para mim mesmo (mas já vai com 200 ficheiros em 2D). Não é para uso de terceiros, só colocarei o 3D necessário.
Depois tentarei ler ficheiros object de 3D, e renderizar com cores, etc.
Fiz experiências como podem ver na imagem com luz, e ver onde bate, etc, e depois tenho de mostrar os objectos que estão à vista, etc.
Isto tem cálculo de perspectiva, ângulo, rotação de objectos, 1001 coisas, e isto é tudo pura Matemática.
Mas as coisas mais usadas são Trigonometria, Vectores, Matrizes, talvez.
Enfim, se não gostarem de Matemática, seria chato para vós.
A máquina está super lenta (ainda não fui buscar a máquina nova), está a uns 400 Mhz lentíssimos, mas roda centenas de cubos 3D na boa, afinal de contas é C++.
Isto já faz muito mais do que desenhar simples cubos, só os meti porque são o teste mais básico que existe, primeiro desenhar pontos (porque ver píxeis no ecrã inicialmente é difícil, têm de ser bolinhas), depois unir com traços, depois trabalhar nas rotações, e perspectivas, etc.
Um dia mostro mais novidades, e talvez galáxias em 3D.
Afinal de contas, o meu lema é “Se é possível, eu consigo!” e se a NASA faz, é óbvio que também farei. Com a diferença de que não tenho super-computadores, terei de fazer cálculos só com objectos super massivos e não com as estrelas todas (milhões). Não serão simulações super realistas, mas espero que fiquem bonitas.
2021-06-03.