Qual è il modo migliore (memoria più bassa, velocità più veloce) per tessere un cubo? dopo un po 'ho trovare questa soluzione:Il modo migliore per strutturare un cubo in openGL
struct dati: la funzione
GLfloat Cube::vertices[] =
{-0.5f, 0.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.5f, 1.0f, 0.5f, -0.5f, 1.0f, 0.5f,
-0.5f, 1.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, -0.5f,
0.5f, 0.0f, 0.5f, 0.5f, 0.0f, -0.5f, 0.5f, 1.0f, -0.5f, 0.5f, 1.0f, 0.5f,
-0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 1.0f, 0.5f, -0.5f, 1.0f, -0.5f
};
GLfloat Cube::texcoords[] = { 0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0,
0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0
};
GLubyte Cube::cubeIndices[24] = {0,1,2,3, 4,5,6,7, 3,2,5,4, 7,6,1,0,
8,9,10,11, 12,13,14,15};
pareggio:
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, cubeIndices);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisable(GL_TEXTURE_2D);
Come si può vedere il risultato è corretto:
ma per per questo risultato devo ridefinire qualche vertice (ci sono 16 punti 3D nell'array vertices
) altrimenti la texture non riesce a mappare in e Funzione DrawElement.
Qualcuno conosce un modo migliore per strutturare un cubo in un array di vertici?
perché hai bisogno della "memoria più veloce/più bassa", pensi di avere un miliardo di cubi sullo schermo? Inoltre, cosa intendi con "ridefinire qualche vertice"? –
Dopo aver impostato le trame del cubo, il fps è diminuito (da 60 a 40). Ho ridefinito qualche vertice nella matrice dei "vertici", se guardi da vicino ci sono 16 punti (3D) in quella matrice, ma per definire un cubo 8 sono sufficienti. – Luca
Allora stai facendo qualcosa di molto sbagliato e probabilmente non è il cubo, 8 o 16 vertici non faranno molta differenza. Considera anche che ogni vertice collega 3 facce e tutte hanno una diversa coordinata uv, hai bisogno di quei vertici "extra". Non sono sicuro, ma devi solo chiamare glTexParameteri una volta, quando crei la texture, se è sul tuo loop potrebbe essere il motivo del rallentamento. –