C++ 更改高度贴图,使其在4x4栅格上显示16个高度贴图
将程序更改为以4 x 4栅格排列显示16个相同的高度贴图。高度贴图的边应在X和Z坐标中并排。但是,它们不会在Y方向上接触,因为高度不同 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();
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
网格