|
Correction acceptée
|
12-09-2010 19:04:30
|
Zorian
|
Texte original:
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 !!
Voilou ! je t'avoue que j'ai misèré pour allèger le code au milieu de la jungle qu'est mon projet ( tout comme mon appart  ) Mais si tu connais opengl tu crée un ptit projet opengl de base et tu y ajoute ça. N'oublie pas glew.h. Sinon je n'ai pas compris dans quel ordre tu les plaçais car tu me donnes comme example la même chose que ma première ligne de coords sauf que c'est 1/4 de texture que tu affiche. (ou 4x je sais plus) En tout cas si comme tu dis, les coords n'étaient pas dans cet ordre, ca expliquerait mes ennuis. Merci.
Correction proposée:
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 !!
Voilou ! je t'avoue que j'ai misèré pour allèger le code au milieu de la jungle qu'est mon projet ( tout comme mon appart  ) Mais si tu connais opengl tu crées un ptit projet opengl de base et tu y ajoutes ça. N'oublie pas glew.h. Sinon je n'ai pas compris dans quel ordre tu les plaçais car tu me donnes comme exemple la même chose que ma première ligne de coords sauf que c'est 1/4 de texture que tu affiches. (ou 4x je sais plus) En tout cas si comme tu dis, les coords n'étaient pas dans cet ordre, ça expliquerait mes ennuis. Merci.
|
|
Dernière modification
|
09-09-2010 19:39:27
|
TUpac
|
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 !!
Voilou ! je t'avoue que j'ai misèré pour allèger le code au milieu de la jungle qu'est mon projet ( tout comme mon appart  ) Mais si tu connais opengl tu crées un ptit projet opengl de base et tu y ajoutes ça. N'oublie pas glew.h. Sinon je n'ai pas compris dans quel ordre tu les plaçais car tu me donnes comme exemple la même chose que ma première ligne de coords sauf que c'est 1/4 de texture que tu affiches. (ou 4x je sais plus) En tout cas si comme tu dis, les coords n'étaient pas dans cet ordre, ça expliquerait mes ennuis. Merci.
|
|
Création du message
|
09-09-2010 19:36:37
|
TUpac
|
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 !!
Voilou ! je t'avoue que j'ai misèré pour allèger le code au milieu de la jungle qu'est mon projet ( tout comme mon appart  ) Mais si tu connais opengl tu crées un ptit projet opengl de base et tu y ajoutes ça. N'oublie pas glew.h. Sinon je n'ai pas compris dans quel ordre tu les plaçais car tu me donnes comme exemple la même chose que ma première ligne de coords sauf que c'est 1/4 de texture que tu affiches. (ou 4x je sais plus) En tout cas si comme tu dis, les coords n'étaient pas dans cet ordre, ça expliquerait mes ennuis. Merci.
|