【发布时间】:2021-12-07 14:47:51
【问题描述】:
我有一个程序地形生成应用程序。现在我想根据高度为地形生成纹理。
假设我现在有 5 个不同高度级别的纹理,对于每个像素,我计算它在网格上的位置,然后获取它的高度,然后决定从哪个纹理中采样。
注意纹理始终是正方形。
在代码中会是这样的:
for (int i = 0; i < resolution; i++) {
for (int j = 0; j < resolution; j++) {
tex[i * resolution* 3 + j * 3 + 0] = SampleTextureR(i, j);
tex[i * resolution* 3 + j * 3 + 1] = SampleTextureG(i, j);
tex[i * resolution* 3 + j * 3 + 2] = SampleTextureB(i, j);
}
}
现在SampleTextureR(i, j) 就像:
for(TextureData* t : txtures){
if(t.heightl > GetMeshElevation(i, j) && t.heightg < GetMeshElevation(i, j))
return t.sampleR(i, j);
}
return 0;
GetMeshElevation 返回某个点的网格高度。 t.sampleR() 返回unsigned char(i, j)处纹理红色像素的值。
heightl 是纹理的最小高度
heightg 是纹理的最大高度
现在的问题是,这是一种非常缓慢的方法。我怎样才能使它足够快以实时完成,以便立即反映对heightl 或heghtg 的更改。 heightl 和 heightg 适用于每个纹理。
这些纹理最高可达 4K 4096X4096
【问题讨论】:
标签: c++ opengl optimization textures