Gwoin Nouveau
Nombre de messages : 1 Date d'inscription : 13/03/2006
| Sujet: 3D et plusieurs textures Lun 13 Mar à 10:46 | |
| Salut à tous. Alors voilà, j'ai un probleme dont je ne trouve pas la solution: j'ai 2 objets dans ma scene avec chacun leur texture (pcx), mais seule la 1ere texture chargée semble s'afficher (objet blanc) Voici le code que j'utilise: - Code:
-
int texture[2]; // Storage For 2 Textures
//initialise la 3D void Init3D() { static bool m_bFirstLaunch = true; ////if (m_bFirstLaunch) powerON(POWER_ALL); // Setup the Main screen for 3D videoSetMode(MODE_0_3D); vramSetBankA(VRAM_A_TEXTURE);
// IRQ basic setup irqInit(); irqSet(IRQ_VBLANK, 0);
// Set our viewport to be the same size as the screen glViewPort(0,0,255,191);
// Specify the Clear Color and Depth glClearColor(0,0,12); glClearDepth(0x7FFF);
//PA_Init3D();
if (m_bFirstLaunch) LoadGLTextures();
if (m_bFirstLaunch) m_bFirstLaunch = false;
//PA_Init3D(); //PA_LoadTexture(texture[0],(u8*)BG_DOWN_pcx, texPCX); //PA_LoadTexture(texture[1],(u8*)cube_pcx, texPCX); }
//affiche la scene void DrawGLScene() { // Reset the screen and setup the view glReset(); gluPerspective(35, 256.0 / 192.0, 0.1, 100); glColor3f(1,1,1);
glPolyFmt(POLY_ALPHA(31) | POLY_CULL_NONE | POLY_FORMAT_LIGHT0); glLight(0, RGB15(31,31,31) , 0, floattov10(-1.0), 0);
glMatrixMode(GL_TEXTURE); glIdentity();
glMatrixMode(GL_MODELVIEW); glLoadIdentity();
glMaterialf(GL_AMBIENT, RGB15(16,16,16)); glMaterialf(GL_DIFFUSE, RGB15(16,16,16)); glMaterialf(GL_SPECULAR, BIT(15) | RGB15(8,8,8)); glMaterialf(GL_EMISSION, RGB15(16,16,16));
glMaterialShinyness();
Test3DKeys();
RenderFond(); RenderCube(); glFlush(); }
//affichage de mes 2 objets : une grille et un cube void RenderCube() { glPushMatrix(); { glColor3f(0.1f, 0.8f, 0.1f); glTranslatef(0.0f,0.3f,-3.0f);
glRotatef(m_fRotationCubeX,1.0f,0.0f,0.0f); glRotatef(m_fRotationCubeY,0.0f,1.0f,0.0f);
//glBindTexture(GL_TEXTURE_2D, texture[1]); PA_Texture(texture[1]);
float l = 0.8; //PA_3DBoxTexture(0.0f,0.0f,0.0f, l, l, l, 0.0f, 0.0f, 0.0f, 256,256,256); glBegin(GL_QUADS); { // Front Face glNormal3f( 0.0f, 0.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-l, -l, l); glTexCoord2f(1.0f, 0.0f); glVertex3f( l, -l, l); glTexCoord2f(1.0f, 1.0f); glVertex3f( l, l, l); glTexCoord2f(0.0f, 1.0f); glVertex3f(-l, l, l); // Back Face glNormal3f( 0.0f, 0.0f,-1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-l, -l, -l); glTexCoord2f(1.0f, 1.0f); glVertex3f(-l, l, -l); glTexCoord2f(0.0f, 1.0f); glVertex3f( l, l, -l); glTexCoord2f(0.0f, 0.0f); glVertex3f( l, -l, -l); // Top Face glNormal3f( 0.0f, 1.0f, 0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-l, l, -l); glTexCoord2f(0.0f, 0.0f); glVertex3f(-l, l, l); glTexCoord2f(1.0f, 0.0f); glVertex3f( l, l, l); glTexCoord2f(1.0f, 1.0f); glVertex3f( l, l, -l); // Bottom Face glNormal3f( 0.0f,-1.0f, 0.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-l, -l, -l); glTexCoord2f(0.0f, 1.0f); glVertex3f( l, -l, -l); glTexCoord2f(0.0f, 0.0f); glVertex3f( l, -l, l); glTexCoord2f(1.0f, 0.0f); glVertex3f(-l, -l, l); // Right face glNormal3f( 1.0f, 0.0f, 0.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( l, -l, -l); glTexCoord2f(1.0f, 1.0f); glVertex3f( l, l, -l); glTexCoord2f(0.0f, 1.0f); glVertex3f( l, l, l); glTexCoord2f(0.0f, 0.0f); glVertex3f( l, -l, l);
// Left Face glNormal3f(-1.0f, 0.0f, 0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-l, -l, -l); glTexCoord2f(1.0f, 0.0f); glVertex3f(-l, -l, l); glTexCoord2f(1.0f, 1.0f); glVertex3f(-l, l, l); glTexCoord2f(0.0f, 1.0f); glVertex3f(-l, l, -l); } glEnd(); } glPopMatrix(1); }
void RenderFond() { glPushMatrix(); { glTranslatef(0.0f,-1.2f,-5.5f);
glBindTexture(GL_TEXTURE_2D, texture[0]);
//glColor3f(0.8f, 0.1f, 0.1f); v16 w=floattov16(5.0f); v16 h=floattov16(5.0f); glBegin(GL_QUADS); { glNormal3f(0.0f, 0.0f, 1.0f); glTexCoord2f(2.0f, 0.0f); glVertex3v16(-w, -h, 0); glTexCoord2f(2.0f, 2.0f); glVertex3v16( w, -h, 0); glTexCoord2f(0.0f, 2.0f); glVertex3v16( w, h, 0); glTexCoord2f(0.0f, 0.0f); glVertex3v16(-w, h, 0); } glEnd(); } glPopMatrix(1); }
//et enfin le code pour charger les textures en mémoire void LoadGLTextures() { int i=0; for (i=0; i<2; i++) { sImage pcx;
//load our textures if (i == 0) loadPCX((u8*)BG_DOWN_pcx, &pcx); else if (i == 1) loadPCX((u8*)cube_pcx, &pcx);
image8to16(&pcx);
glGenTextures(1, &texture[i]); glBindTexture(GL_TEXTURE_2D, texture[i]); if (i==0) glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXTURE_SIZE_256 , TEXTURE_SIZE_256, 0, TEXGEN_TEXCOORD, pcx.data8); else glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, TEXTURE_SIZE_128 , TEXTURE_SIZE_128, 0, TEXGEN_TEXCOORD, pcx.data8);
imageDestroy(&pcx); } } Mes textures sont bien à la bonne taille (de toute facon j'ai essayé avec d'autres tailles), et quand j'applique la 1ere texture sur les 2 objets tout est correct, mme chose si j'inverse l'ordre de chargement des textures. Quelqu'un à une idéede où peut venir mon probleme? Merci | |
|