texte initial | correction | date |
---|---|---|
Et ben dit donc, tu dis que ça fait pas longtemps pourtant tu as l'air de connaitre par coeur |
Et ben dit donc, tu dis que ça fait pas longtemps pourtant tu as l'air de connaitre par coeur
|
12-09-2010 21:16:59 |
oui effectivement les normale joue sur la lumière, mais de "base" comme je les expliquer les "faces" ne sont pas forcement dans le bon sens, le faite de spécifier les normale évite deux chose, le problème d'une mal orientation, et des calcule supplémentaire pour ogl, qui lui va les calculer a "l'arrache" suivant le sens de construction pour l'affichage, pour se qui est des texture, et du double buffer, je ne sais pas vraiment, mais en tout cas au final, je doute que tu gagne en espace ? |
oui effectivement les normales jouent sur la lumière, mais de "base" comme je l'ai expliqué les "faces" ne sont pas forcément dans le bon sens, le fait de spécifier les normales évite deux choses, le problème d'une mauvaise orientation, et des calculs supplémentaires pour ogl, qui lui va les calculer à "l'arrache" suivant le sens de construction pour l'affichage, pour ce qui est des textures, et du double buffer, je ne sais pas vraiment, mais en tout cas au final, je doute que tu gagnes en espace ?
|
12-09-2010 21:15:40 |
|
|
12-09-2010 21:12:05 |
"Un petit dessin mal fait vaut mieu qu'un long post écrit par un débile." |
"Un petit dessin mal fait vaut mieut qu'un long post écrit par un débile."
|
12-09-2010 21:11:26 |
par rapport à ton code, j'ai juste rajouter glewInit() et le swap() qui était par defaut dans la demo codeblocks et enlevé le translatf et rotate sinon je voyait rien !?! |
par rapport à ton code, j'ai juste rajouté glewInit() et le swap() qui était par défaut dans la démo codeblocks et enlevé le translatf et rotate sinon je voyais rien !?!
|
12-09-2010 21:09:58 |
Ok !! pour moi l'odre des indices indiquait le coté visible du poly. Mais en quoi les normales jouent dans l'orientation de la texture ? Je pige pas trop ... |
Ok !! pour moi l'ordre des indices indiquait le coté visible du poly. Mais en quoi les normales jouent dans l'orientation de la texture ? Je pige pas trop ...
|
12-09-2010 21:08:51 |
première chose il vaut mieux utiliser glDrawArrays que glDrawElement plus rapide, et plus orienté VBO ...
Code c++ :tmp->vertices[0].Pos = core::math::vector3df( size.x/2,-size.y/2, -size.z/2); tmp->vertices[1].Pos = core::math::vector3df(-size.x/2,-size.y/2, -size.z/2); tmp->vertices[2].Pos = core::math::vector3df( size.x/2, size.y/2, -size.z/2); tmp->indices[0].vertex[0] = 3; tmp->indices[0].vertex[1] = 2; tmp->indices[0].vertex[2] = 1; tmp->indices[1].vertex[0] = 0; tmp->indices[1].vertex[1] = 1; tmp->indices[1].vertex[2] = 2;
Code c++ :tmp->vertices[0].Pos = core::math::vector3df( size.x/2,-size.y/2, -size.z/2); tmp->vertices[1].Pos = core::math::vector3df(-size.x/2,-size.y/2, -size.z/2); tmp->vertices[2].Pos = core::math::vector3df( size.x/2, size.y/2, -size.z/2); tmp->indices[0].vertex[0] = 1; tmp->indices[0].vertex[1] = 2; tmp->indices[0].vertex[2] = 3; tmp->indices[1].vertex[0] = 2; tmp->indices[1].vertex[1] = 1; tmp->indices[1].vertex[2] = 0;
|
première chose il vaut mieux utiliser glDrawArrays que glDrawElement plus rapide, et plus orienté VBO ...
Code c++ :tmp->vertices[0].Pos = core::math::vector3df( size.x/2,-size.y/2, -size.z/2); tmp->vertices[1].Pos = core::math::vector3df(-size.x/2,-size.y/2, -size.z/2); tmp->vertices[2].Pos = core::math::vector3df( size.x/2, size.y/2, -size.z/2); tmp->indices[0].vertex[0] = 3; tmp->indices[0].vertex[1] = 2; tmp->indices[0].vertex[2] = 1; tmp->indices[1].vertex[0] = 0; tmp->indices[1].vertex[1] = 1; tmp->indices[1].vertex[2] = 2;
Code c++ :tmp->vertices[0].Pos = core::math::vector3df( size.x/2,-size.y/2, -size.z/2); tmp->vertices[1].Pos = core::math::vector3df(-size.x/2,-size.y/2, -size.z/2); tmp->vertices[2].Pos = core::math::vector3df( size.x/2, size.y/2, -size.z/2); tmp->indices[0].vertex[0] = 1; tmp->indices[0].vertex[1] = 2; tmp->indices[0].vertex[2] = 3; tmp->indices[1].vertex[0] = 2; tmp->indices[1].vertex[1] = 1; tmp->indices[1].vertex[2] = 0;
|
12-09-2010 21:08:11 |
t'as qu'a utiliser ça : |
t'as qu'à utiliser ça :
|
12-09-2010 21:05:14 |
Code c++ :enum // pour ne pas se mélanger les buffers { vertex = 0, INDEX = 1, TEXCOORD = 2 }; //Cube Données GLsizeiptr VertSz = 8 * 3 * sizeof(GLfloat); GLfloat VertData[] = { -1.0f,-1.0f, 1.0f, -1.0f,-1.0f,-1.0f, -1.0f, 1.0f,-1.0f, -1.0f, 1.0f, 1.0f, 1.0f,-1.0f, 1.0f, 1.0f,-1.0f,-1.0f, 1.0f, 1.0f,-1.0f, 1.0f, 1.0f, 1.0f,}; GLsizeiptr IndexSz = 6 * 6 * sizeof(GLubyte); GLubyte IndexData[] = { 1,0,2, 3,2,0, // gauche droite 5,6,4, 7,4,6, 7,3,4, 0,4,3, // face fond 6,1,2, 5,1,6, 3,7,2, 6,2,7, // haut bas 1,5,0, 4,0,5,}; GLsizeiptr CoordsSz = 8 * 2 * sizeof(GLfloat); GLfloat CoordsData[] = { 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.0f,1.0f, 1.0f,0.0f, 0.0f,0.0f, 0.0f,1.0f, 1.0f,1.0f, 1.0f,0.0f, 0.0f,1.0f, 1.0f,0.0f, 1.0f,0.0f, 0.0f,0.0f, 0.0f,1.0f, 1.0f,1.0f, 1.0f,0.0f,}; int BufferSz = 3; GLuint BuffersId[BufferSz]; GLsizei VertexCount = 8; GLsizei IndexCount = 36; void End() // nettoyage de vram. Si tu oublie window$ devrait s'en charger.. { glDeleteBuffers(BufferSz, BufferName); } void Render(Vec3f *pos, Vec3f *rot) // fonction de rendu { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); glRotatef(rot->x, 1,0,0); glRotatef(rot->y, 0,1,0); glRotatef(rot->z, 0,0,1); glTranslatef(pos->x, pos->y, pos->z); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[vertex]); glBufferDataARB(GL_ARRAY_BUFFER, VertexSz, VertexData, GL_STREAM_DRAW); glVertexPointer(3, GL_FLOAT, 0, 0); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[INDEX]); glBufferDataARB(GL_ARRAY_BUFFER, IndexSz, IndexData, GL_STREAM_DRAW); glIndexPointer(GL_UNSIGNED_BYTE, 0, 0); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[TEXCOORD]); glBufferDataARB(GL_ARRAY_BUFFER, CoordsSz, CoordsData, GL_STREAM_DRAW); glTexCoordPointer(2, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_INDEX_ARRAY); glDrawElements(GL_TRIANGLES, IndexCount, GL_UNSIGNED_BYTE, IndexData); //RENDU !! glDisableClientState(GL_INDEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glPopMatrix(); } // 2010 copyright all rights reserved. PTDR !!
|
Code c++ :enum // pour ne pas se mélanger les buffers { vertex = 0, INDEX = 1, TEXCOORD = 2 }; //Cube Données GLsizeiptr VertSz = 8 * 3 * sizeof(GLfloat); GLfloat VertData[] = { -1.0f,-1.0f, 1.0f, -1.0f,-1.0f,-1.0f, -1.0f, 1.0f,-1.0f, -1.0f, 1.0f, 1.0f, 1.0f,-1.0f, 1.0f, 1.0f,-1.0f,-1.0f, 1.0f, 1.0f,-1.0f, 1.0f, 1.0f, 1.0f,}; GLsizeiptr IndexSz = 6 * 6 * sizeof(GLubyte); GLubyte IndexData[] = { 1,0,2, 3,2,0, // gauche droite 5,6,4, 7,4,6, 7,3,4, 0,4,3, // face fond 6,1,2, 5,1,6, 3,7,2, 6,2,7, // haut bas 1,5,0, 4,0,5,}; GLsizeiptr CoordsSz = 8 * 2 * sizeof(GLfloat); GLfloat CoordsData[] = { 0.0f,0.0f, 1.0f,0.0f, 1.0f,1.0f, 0.0f,1.0f, 1.0f,0.0f, 0.0f,0.0f, 0.0f,1.0f, 1.0f,1.0f, 1.0f,0.0f, 0.0f,1.0f, 1.0f,0.0f, 1.0f,0.0f, 0.0f,0.0f, 0.0f,1.0f, 1.0f,1.0f, 1.0f,0.0f,}; int BufferSz = 3; GLuint BuffersId[BufferSz]; GLsizei VertexCount = 8; GLsizei IndexCount = 36; void End() // nettoyage de vram. Si tu oublies window$ devrait s'en charger.. { glDeleteBuffers(BufferSz, BufferName); } void Render(Vec3f *pos, Vec3f *rot) // fonction de rendu { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); glRotatef(rot->x, 1,0,0); glRotatef(rot->y, 0,1,0); glRotatef(rot->z, 0,0,1); glTranslatef(pos->x, pos->y, pos->z); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[vertex]); glBufferDataARB(GL_ARRAY_BUFFER, VertexSz, VertexData, GL_STREAM_DRAW); glVertexPointer(3, GL_FLOAT, 0, 0); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[INDEX]); glBufferDataARB(GL_ARRAY_BUFFER, IndexSz, IndexData, GL_STREAM_DRAW); glIndexPointer(GL_UNSIGNED_BYTE, 0, 0); glBindBufferARB(GL_ARRAY_BUFFER, BuffersId[TEXCOORD]); glBufferDataARB(GL_ARRAY_BUFFER, CoordsSz, CoordsData, GL_STREAM_DRAW); glTexCoordPointer(2, GL_FLOAT, 0, 0); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); glEnableClientState(GL_INDEX_ARRAY); glDrawElements(GL_TRIANGLES, IndexCount, GL_UNSIGNED_BYTE, IndexData); //RENDU !! glDisableClientState(GL_INDEX_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); glPopMatrix(); } // 2010 copyright all rights reserved. PTDR !!
|
12-09-2010 21:04:30 |
Code:0.00f,0.00f, 0.25f,0.00f, 0.25f,0.25f, 0.00f,0.25f,
........... |
Code:0.00f,0.00f, 0.25f,0.00f, 0.25f,0.25f, 0.00f,0.25f, ........... |
12-09-2010 21:03:25 |