Historique des modifications - Message

Message #8746

Sujet: Texture Coordinates sur Vertex partagés


Type Date Auteur Contenu
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 tongue)
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 tongue)
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 tongue)
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 tongue)
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.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
153 invités en ligne
membre en ligne: -
RSS Feed