Ethoel
19-10-2009, 19:21
Salve ragazzi, faccio presente che me la cavo bene con la programmazione (C,C++,Java,Php sono linguaggi che conosco bene) quindi volevo iniziare a fare qualcosa utilizzando le librerie grafiche OpenGL (dopo un bel pò di 2D con le allegro)...
Sono bloccato in un vicolo cieco dovuto alla mia poca conoscenza delle OpenGL, se faccio un solo oggetto con una texture fin lì è tutto ok, il problema sono 2 oggetti diversi con 2 texture diverse...
Io ho fatto una specie di "grosso prato" (virgolettato perchè la texture usata è veramente orrenda), e una grossa piramide al centro, quando vado ad eseguire il prato è ok, la piramide invece appare verde o.O
Vi posto le parti di codice interessate:
Texture:
int LoadGLTextures() // Load Bitmaps And Convert To Textures
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[2];
memset(TextureImage,0,sizeof(void *)*1);
// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
if (TextureImage[0]=LoadBMP("erba.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]); // Create The Texture
// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texture[0]);
// Generate The Texture
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering
}
if (TextureImage[0]) // If Texture Exists
{
if (TextureImage[0]->data) // If Texture Image Exists
{
free(TextureImage[0]->data); // Free The Texture Image Memory
}
free(TextureImage[0]); // Free The Image Structure
}
return Status; // Return The Status
}
Piramide:
void pyramid(float x,float z)
{
glTranslatef(x,0.0f,z);
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (front)
glVertex3f(-2.0f,0.0f, 2.0f); // Left of triangle (front)
glVertex3f( 2.0f,0.0f, 2.0f); // Right of triangle (front)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (right)
glVertex3f( 2.0f,0.0f, 2.0f); // Left of triangle (right)
glVertex3f( 2.0f,0.0f, -2.0f); // Right of triangle (right)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (back)
glVertex3f( 2.0f,0.0f, -2.0f); // Left of triangle (back)
glVertex3f(-2.0f,0.0f, -2.0f); // Right of triangle (back)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (left)
glVertex3f(-2.0f,0.0f,-2.0f); // Left of triangle (left)
glVertex3f(-2.0f,0.0f, 2.0f); // Right of triangle (left)
glEnd(); // Finished Drawing The Triangle
}
"erba":
void quad(float x, float z){
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,1.0f); glVertex3f(-2.0f+x, 0.0f, 2.0f+z); // Sopra a sinistra
glTexCoord2f(1.0f,1.0f); glVertex3f( 2.0f+x, 0.0f, 2.0f+z); // Sopra a destra
glTexCoord2f(1.0f,0.0f); glVertex3f( 2.0f+x, 0.0f, -2.0f+z); // Sotto a destra
glTexCoord2f(0.0f,0.0f); glVertex3f(-2.0f+x, 0.0f, -2.0f+z); //sotto a sinistra
glEnd();
glDisable(texture[0]);
}
Ah... ehm... le x e z lasciatele stare XD
Una mano?
Sono bloccato in un vicolo cieco dovuto alla mia poca conoscenza delle OpenGL, se faccio un solo oggetto con una texture fin lì è tutto ok, il problema sono 2 oggetti diversi con 2 texture diverse...
Io ho fatto una specie di "grosso prato" (virgolettato perchè la texture usata è veramente orrenda), e una grossa piramide al centro, quando vado ad eseguire il prato è ok, la piramide invece appare verde o.O
Vi posto le parti di codice interessate:
Texture:
int LoadGLTextures() // Load Bitmaps And Convert To Textures
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[2];
memset(TextureImage,0,sizeof(void *)*1);
// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
if (TextureImage[0]=LoadBMP("erba.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]); // Create The Texture
// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texture[0]);
// Generate The Texture
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering
}
if (TextureImage[0]) // If Texture Exists
{
if (TextureImage[0]->data) // If Texture Image Exists
{
free(TextureImage[0]->data); // Free The Texture Image Memory
}
free(TextureImage[0]); // Free The Image Structure
}
return Status; // Return The Status
}
Piramide:
void pyramid(float x,float z)
{
glTranslatef(x,0.0f,z);
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (front)
glVertex3f(-2.0f,0.0f, 2.0f); // Left of triangle (front)
glVertex3f( 2.0f,0.0f, 2.0f); // Right of triangle (front)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (right)
glVertex3f( 2.0f,0.0f, 2.0f); // Left of triangle (right)
glVertex3f( 2.0f,0.0f, -2.0f); // Right of triangle (right)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (back)
glVertex3f( 2.0f,0.0f, -2.0f); // Left of triangle (back)
glVertex3f(-2.0f,0.0f, -2.0f); // Right of triangle (back)
glVertex3f( 0.0f, 8.0f, 0.0f); // Top of triangle (left)
glVertex3f(-2.0f,0.0f,-2.0f); // Left of triangle (left)
glVertex3f(-2.0f,0.0f, 2.0f); // Right of triangle (left)
glEnd(); // Finished Drawing The Triangle
}
"erba":
void quad(float x, float z){
glBindTexture(GL_TEXTURE_2D, texture[0]);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
glTexCoord2f(0.0f,1.0f); glVertex3f(-2.0f+x, 0.0f, 2.0f+z); // Sopra a sinistra
glTexCoord2f(1.0f,1.0f); glVertex3f( 2.0f+x, 0.0f, 2.0f+z); // Sopra a destra
glTexCoord2f(1.0f,0.0f); glVertex3f( 2.0f+x, 0.0f, -2.0f+z); // Sotto a destra
glTexCoord2f(0.0f,0.0f); glVertex3f(-2.0f+x, 0.0f, -2.0f+z); //sotto a sinistra
glEnd();
glDisable(texture[0]);
}
Ah... ehm... le x e z lasciatele stare XD
Una mano?