Hi!
I’m trying to add texture to a project I’m working on. But somehow no textures appear.
The project is really big so I’m just gonna post the parts I think are important to the textures. Please ask if you need more.
int main(int argc, char* argv[]){
glutDisplayFunc(HandleDisplayCallback);
world = new World();
glutMainLoop();
delete world;
return 0;
}
World::World()
{
cars[0] = new Car("model.3ds");
terrain = new Terrain("Terrain.bmp");
}
void World::Draw()
{
HandleKeyboard();
terrain->Draw();
cars[0]->Draw();
}
Terrain::Terrain(const char* terrainFileName_)
{
sprintf(terrainFileName, "%s", terrainFileName_);
LoadTextures();
InitializeTerrain();
}
void Terrain::LoadTextures()
{
glGenTextures(1, &t_relva);
perror("glGenTextures");
glBindTexture(GL_TEXTURE_2D, t_relva);
perror("glBindTexture");
sprintf(tPath, "%sgreen.bmp", TEX_PATH);
imag.LoadBmpFile(tPath);
//imag.LoadBmpFile(TEX_PATH+"green.bmp");
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
perror("glTexEnvf");
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
perror("glTexParameteri");
glTexImage2D(GL_TEXTURE_2D, 0, 3,
imag.GetNumCols(),
imag.GetNumRows(), 0, GL_RGB, GL_UNSIGNED_BYTE,
imag.ImageData());
perror("glTexImage2D");
}
void Terrain::Draw(){
// set the current texture to the land texture
glBindTexture(GL_TEXTURE_2D, t_relva);
//printf("Draw
");
// we are going to loop through all of our terrain's data points,
// but we only want to draw one triangle strip for each set along the x-axis.
for (int z = 0; z < MAP_Z-1; z++)
{
glBegin(GL_TRIANGLE_STRIP);
for (int x = 0; x < MAP_X-1; x++)
{
// for each vertex, we calculate the grayscale shade color,
// we set the texture coordinate, and we draw the vertex.
/*
the vertices are drawn in this order:
0 ---> 1
/
/
|/
2 ---> 3
*/
///printf("triangle strip: %d, %d, %d
", terrain[x][z][0], terrain[x][z][1], terrain[x][z][2]);
// draw vertex 0
glColor3f(terrain[x][z][1]/255.0f, terrain[x][z][1]/255.0f, terrain[x][z][1]/255.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(terrain[x][z][0], terrain[x][z][1], terrain[x][z][2]);
// draw vertex 1
glTexCoord2f(1.0f, 0.0f);
glColor3f(terrain[x+1][z][1]/255.0f, terrain[x+1][z][1]/255.0f, terrain[x+1][z][1]/255.0f);
glVertex3f(terrain[x+1][z][0], terrain[x+1][z][1], terrain[x+1][z][2]);
// draw vertex 2
glTexCoord2f(0.0f, 1.0f);
glColor3f(terrain[x][z+1][1]/255.0f, terrain[x][z+1][1]/255.0f, terrain[x][z+1][1]/255.0f);
glVertex3f(terrain[x][z+1][0], terrain[x][z+1][1], terrain[x][z+1][2]);
// draw vertex 3
glColor3f(terrain[x+1][z+1][1]/255.0f, terrain[x+1][z+1][1]/255.0f, terrain[x+1][z+1][1]/255.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(terrain[x+1][z+1][0], terrain[x+1][z+1][1], terrain[x+1][z+1][2]);
}
glEnd();
}
// enable blending
glEnable(GL_BLEND);
}
I want to leave here a disclaimer, I did not do everything by myself but I understand all that is here.