Para gerar o terreno criei uma malha de vetores de n * n, cada item da matriz representa um quadrado formado por dois
trianglos, então no caso de uma matriz de 32 x 32, teremos 2.048 trianglos, 4096
vértices (x,y,z), 6.144 índices (i) e
6.144 coordenadas de textura (u,v).Este primeiro é responsável por preparar a malha de terreno, aqui é o ponto
ideal para criar montanhas e crateras através do eixo z
trianglos, então no caso de uma matriz de 32 x 32, teremos 2.048 trianglos, 4096
vértices (x,y,z), 6.144 índices (i) e
6.144 coordenadas de textura (u,v).Este primeiro é responsável por preparar a malha de terreno, aqui é o ponto
ideal para criar montanhas e crateras através do eixo z
numIndexs = (height * width * 6); numVecs = (height * width * 4); vecs = new vec3d[numVecs]; texCoord = new TexCoord2[numVecs]; indexs = new dTriIndex[numVecs]; for (int y=0; y< h; y++) for (int x=0; x< w; x++) { int offset = w*y+x; vecs[offset].x = (x*scale); vecs[offset].y = (y*scale); vecs[offset].z = 0.0f; }
O desenho é feito
através de um VertexBufferObject herdado
da classe Mesh as texturas também
estão armazenadas no Mesh e por
final a classe Terrain que contém as
características do terreno e a implementação dos algoritmos de carga das informações
dos vértices, texturas e índices.
Depois de mapeado copio os buffers para a memória do
hardware através da classe quem implementa o VBO
vbo = new VertexBufferObject(); vbo->glMode = GL_TRIANGLES; vbo->setVertices(vecs,numVecs); vbo->setIndexs(indexs,numIndexs); vbo->setTexCoords(texCoord,numIndexs);
Por fim no método Draw, faço
a render do terreno.
a render do terreno.
glPushMatrix(); glMatrixMode(GL_MODELVIEW); glTranslatef(iPosition.x,iPosition.y,iPosition.z); //Draw Here texture->begin(); vbo->draw(); texture->end(); glPopMatrix();
Este foi um terreno de 32×32 a ideia agora é criar terrenos de até
2048×2048, para isso vou precisar dividir o terreno em várias partes menores e
só deixar na memória as partes que estão sendo visualizadas pelo ator, além de
possibilitar multi textura é um grande desafio pela frente.
2048×2048, para isso vou precisar dividir o terreno em várias partes menores e
só deixar na memória as partes que estão sendo visualizadas pelo ator, além de
possibilitar multi textura é um grande desafio pela frente.
Leave a Reply
You must be logged in to post a comment.