0

在 OpenGL 中,我尝试使用texture3D绘制具有 8 个 512x512 图像的地形,以获得混合纹理变化。但是 OpenGL 强迫我分配 512x512x512 数组而不是 512x512x8 有什么解决办法

4

2 回答 2

2

但是 Opengl 强迫我分配 512x512x512

是什么让你产生了这个想法?512×512×8 是完全有效的 3D 纹理尺寸。对于地形,您还可以查看 GL_TEXTURE_2D_ARRAY,它也使用 glTexImage3D 进行初始化,但不会在图层之间进行插值,这在某些情况下很有用。

于 2013-05-08T15:31:01.430 回答
0

即使您需要插值将一个纹理混合到另一个纹理中,您也应该尝试使用 GL_TEXTURE_2D_ARRAY 并在片段着色器中手动将纹理混合在一起。尽管使用自动硬件放大过滤器似乎更好,但请记住,对于 GL_TEXTURE_3D 实现,6 个方向上的相邻像素更有可能被缓存,据我了解,您更强调集合中的单个 2D 纹理及其相邻层,因此您最好让硬件制作 3 条缓存线,每条线在 4 个方向上。两者都试一下看看哪个效果更好是个好主意

于 2013-05-08T16:24:01.527 回答