在OpenGL中,我尝试使用 texture3D 将8个512x512图像映射到 terrain ,以获得混合纹理更改。 但OpenGL迫使我分配512x512x512阵列而不是512x512x8 什么可以解决方案
答案 0 :(得分:2)
但是Opengl强迫我分配512x512x512
是什么给了你这个想法? 512×512×8是完全有效的3D纹理尺寸。对于地形,您还可以查看GL_TEXTURE_2D_ARRAY,它也使用glTexImage3D进行初始化,但不在层之间进行插值,这在某些情况下很有用。
答案 1 :(得分:0)
即使您需要插值以将一个纹理混合到另一个纹理中,您还应该尝试使用GL_TEXTURE_2D_ARRAY并在片段着色器中手动混合纹理。 虽然看起来最好利用自动硬件放大滤镜,但请记住,对于GL_TEXTURE_3D实现,6个方向的相邻像素更有可能被缓存,而且从我的理解中你更加强调集合中的各个2D纹理及其相邻层,因此您最好让硬件制作3条缓存线,每条线在4个方向上。 尝试两者并看看哪些表现更好
是个好主意