C++ 更改高度贴图,使其在4x4栅格上显示16个高度贴图

C++ 更改高度贴图,使其在4x4栅格上显示16个高度贴图,c++,graphics,heightmap,C++,Graphics,Heightmap,将程序更改为以4 x 4栅格排列显示16个相同的高度贴图。高度贴图的边应在X和Z坐标中并排。但是,它们不会在Y方向上接触,因为高度不同 C++ 下面的代码是我已经拥有的,我只是不太确定如何让它显示在4x4网格中排列的16个相同高度的地图。我知道这和高度图上的方块有关,但我很困惑 const int HEIGHTMAP_SIZE = 12; float heights[HEIGHTMAP_SIZE + 1][HEIGHTMAP_SIZE + 1]; initDisplay();

将程序更改为以4 x 4栅格排列显示16个相同的高度贴图。高度贴图的边应在X和Z坐标中并排。但是,它们不会在Y方向上接触,因为高度不同

C++

下面的代码是我已经拥有的,我只是不太确定如何让它显示在4x4网格中排列的16个相同高度的地图。我知道这和高度图上的方块有关,但我很困惑

 const int HEIGHTMAP_SIZE = 12;
 float heights[HEIGHTMAP_SIZE + 1][HEIGHTMAP_SIZE + 1];  

initDisplay();
    for (unsigned int x = 0; x <= HEIGHTMAP_SIZE; x++)
    {
        for (unsigned int z = 0; z <= HEIGHTMAP_SIZE; z++)
        {
            heights[x][z] = (x % 2) * 0.5f -
            z * z * 0.05f;
        }
    }
    //TextureManager::activate("rainbow.bmp");
    initHeightmapDisplayList();

 void initHeightmapHeights()
 {
    for (unsigned int x0 = 0; x0 < HEIGHTMAP_SIZE; x0++)
    {
        unsigned int x1 = x0 + 1;
        float tex_x0 = (float)(x0) / HEIGHTMAP_SIZE;
        float tex_x1 = (float)(x1) / HEIGHTMAP_SIZE;
        glBegin(GL_TRIANGLE_STRIP);
        for (unsigned int z = 0; z <= HEIGHTMAP_SIZE; z++)
        {
            float tex_z = (float)(z) / HEIGHTMAP_SIZE;
            glTexCoord2d(tex_x1, tex_z);
            glVertex3d(x1, heights[x1][z], z);
            glTexCoord2d(tex_x0, tex_z);
            glVertex3d(x0, heights[x0][z], z);
        }
        glEnd();
    }
 }  

 void initHeightmapDisplayList()
 {
    heightmap_list.begin();
    glEnable(GL_TEXTURE_2D);

    TextureManager::activate("ground.bmp");
    glColor3d(1.0, 1.0, 1.0);
    initHeightmapHeights();
    glDisable(GL_TEXTURE_2D);
    heightmap_list.end();
 }
const int HEIGHTMAP_SIZE=12;
浮动高度[高度贴图大小+1][高度贴图大小+1];
initDisplay();

对于(unsigned int x=0;x我怀疑您的
TextureManager
已经有了一种不用直接调用OpenGL就能做到这一点的方法。 您应该做的是使纹理自身重复

gltexparametri(GL_纹理2D,GL_纹理包裹S,GL_重复);
然后将纹理坐标向上缩放一个因子
4
,您将获得原始纹理的
4x4
网格