cityhunterxyz 100111011010010011 bip! | Bonjour,
je débute en OpenGL et je voulais faire un carré texturé à base de vertex array. je crèe bien le carré mais il n'est pas texturé. si j'assigne des couleurs au vertex, cela se passe bien. voici les parties de code correspondantes :
Code :
- //////////////////// Third VO creation
- ///Set*Array sont des méthodes de l'objet pour stocker les informations et le tableau de données
- /// le premier argument est les type, le second le nombre de composantes par entrée, le 3ième
- // c'est le tableau lui mm et le 4ième le nombre d'élements
- rectangleTextureVO = new VertexObject();
- GLfloat Vertices3[4][3] = { { 0.0, 0.0, 0.0}, //0
- { w, 0.0, 0.0}, //1
- { w, h, 0.0}, //2
- { 0.0, h, 0.0}};//3
- rectangleTextureVO->SetVerticesArray(DataArray::FLOAT, 3, Vertices3, 4);
- GLubyte indices3[] = {
- 0, 1, 2, 3
- };
- rectangleTextureVO->SetFaceIndicesArray (DataArray::UINT8_T, 4, indices, 1);
- rectangleTextureVO->AddTexture(texture);
- ///////////////////// drawing part
- glLoadIdentity();
- glTranslatef(100.0f,100.0f,-60.0f);
- glRotatef(45.0f, 1.0f, 1.0f, 1.0f);
- rectangleTextureVO->draw();
|
draw() se décompose comme suit :
Code :
- int VertexObject::draw()
- {
- IN("\n" );
- glPushClientAttrib(0);
- if (this->Colors != NULL)
- {
- glEnableClientState(GL_COLOR_ARRAY);
- printf("%d %d %d\n" ,Colors->ComponentsCount, Colors->datatype_t, Colors->array.all);
- glColorPointer(Colors->ComponentsCount, Colors->datatype_t, 0, Colors->array.all);
- }
- if (this->Normals != NULL)
- {
- glEnableClientState(GL_NORMAL_ARRAY);
- glNormalPointer(Normals->datatype_t, 0, Normals->array.all);
- }
- if (this->TextureData != NULL)
- {
- this->TextureData->ClientActiveTexture(GL_TEXTURE0);
- }
- if (this->Vertices != NULL && this->Indices != NULL)
- {
- glEnableClientState(GL_VERTEX_ARRAY);
- printf("%d %d %d\n" ,Vertices->ComponentsCount, Vertices->datatype_t, Vertices->array.all);
- glVertexPointer(Vertices->ComponentsCount, Vertices->datatype_t, 0, Vertices->array.all);
- //go through our index array and draw our vertex array
- GLenum mode;
- if ( Indices->ComponentsCount == 3 ) mode = GL_TRIANGLES;
- else mode = GL_QUADS;
- glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
- glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
- glMaterialf(GL_FRONT, GL_SHININESS, high_shininess);
- glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
- //Indices->count has allready the right count of Indices (Indices->ComponentsCount*nbfaces)
- glDrawElements(mode,
- this->Indices->count * this->Indices->ComponentsCount,
- this->Indices->datatype_t,
- this->Indices->array.all);
- }
- if (this->TextureData != NULL)
- {
- this->TextureData->ReleaseTecture();
- /* for multitexturing
- //unbind the texture occupying the first texture unit
- glActiveTextureARB( GL_TEXTURE0_ARB );
- glDisable( GL_TEXTURE_2D );
- glBindTexture( GL_TEXTURE_2D, 0 );
- */
- }
- glPopClientAttrib();
- debug::Instance()->FlushGL();
- OUT("\n" );
- return 0;
- }
|
et this->TextureData->ClientActiveTexture(GL_TEXTURE0); fait ceci
Code :
- void Texture::ClientActiveTexture( GLenum texture )
- {
- if (ID == 0)
- {
- glGenTextures(1,&(this->ID));
- glBindTexture(TextureType,ID);
- glTexImage2D (
- TextureType,
- 0,
- this->ComponentsCount,
- this->width,
- this->height,
- 0,
- this->format,
- this->type,
- pdata
- );
- glTexParameteri(TextureType, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(TextureType, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- }
- texturePipeID = texture;
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glDisable( GL_BLEND );
- glClientActiveTexture(texturePipeID);
- glEnableClientState(GL_TEXTURE_COORD_ARRAY);
- glTexCoordPointer(TexCoord->ComponentsCount,
- (GLenum)*(TexCoord),
- 0,
- TexCoord->array.all);
- //bind the primary texture to the first texture unit
- glActiveTextureARB( texturePipeID );
- glEnable( TextureType );
- glBindTexture( TextureType, ID);
- }
|
j'ai un doute sur la partie glBindTexture.... je ne suis pas sur qu'elle soit bien placée
merci d'avance
cordialement
JLM |