c++ - 如何在 OpenGL 中的地形上添加单个纹理?

标签 c++ opengl

我是 OpenGL 的新手。是否可以将单个图像包裹在地形上?

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

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

最佳答案

问题是您目前正在将纹理映射到每个正方形。当你穿越地形时,你需要改变你的 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
    }
}

关于c++ - 如何在 OpenGL 中的地形上添加单个纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116677/

相关文章:

c++ - 在现代OpenGL中,使用GL_TRIANGLE奇怪的z轴行为绘制实心圆

c++ - 在 SSBO 中发送 uvec4 数组

c++ - OpenGL:如何使用深度排序的顶点数组设计高效的渲染系统?

c++ - opengl - glBindTexture 是否覆盖事件纹理单元的内容

c++ - 编辑开源库

c++ - 链接 Paho MQTT CMake

c - Opengl,2d 固定形状,在带有移动相机的 3d 场景中

c++ - 在多个 C++ 项目的代码库中组织 .libs

java - JNAerator - 使用由 typedef 生成的接口(interface)

C++ 双释放或损坏(出): Even with copy constructor and assignment operator