2011-11-14 18 views
0

刚刚接触OpenGL。是否可以在地形上包装单个图像?如何在OpenGL中的地形上添加单个纹理?

下面的代码会生成图像拼贴,但我想在整个地形上添加单个拼贴。

glBindTexture(GL_TEXTURE_2D, land); 
for (int z = 0; z < MAP_Z-1; z++) 
{ 

    glBegin(GL_TRIANGLE_STRIP); 

    for (int x = 0; x < MAP_X-1; x++) 
    { 

    glTexCoord2f(0.0f, 0.0f); 
    glVertex3f(terrain[x][z][0], terrain[x][z][1], terrain[x][z][2]); 

    glTexCoord2f(1.0f, 0.0f); 
    glVertex3f(terrain[x+1][z][0], terrain[x+1][z][1], terrain[x+1][z][2]); 

     glTexCoord2f(0.0f, 1.0f); 
    glVertex3f(terrain[x][z+1][0], terrain[x][z+1][1], terrain[x][z+1][2]); 

     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(); 
} 

回答

4

问题是您目前正在将纹理映射到每个方块。当你越过地形时,你需要改变你的glTexCoord2f。只需在for循环中将x和z坐标除以地形的宽度和高度即可。

for (int z = 0; z < MAP_Z-1; z++) 
{ 

    glBegin(GL_TRIANGLE_STRIP); 

    for (int x = 0; x < MAP_X-1; x++) 
    { 

     glTexCoord2f((float)x/(float)MAP_X, (float)z/(float)MAP_Z); 
     ... 
     ... // Other code with (x+1) and (z+1) in the glTexCoord2f 
    } 
} 
+1

你需要一些强制转换,否则你正在做整数除法。 – Pubby

+0

不错,谢谢@Pubby。 – NickLH

+0

我试过这种方式。我仍然得到瓷砖..我不知道我在我的代码上犯了什么错误。有没有其他的方法可以做? – Srivi