如何从 OpenGL 4.5 中的单个立方体贴图纹理创建立方体贴图阵列纹理?
How to create a cube map array texture from individual cube map textures in OpenGL 4.5?
假设我有许多立方体贴图纹理,我希望将它们作为立方体贴图数组纹理全部传递给 GPU。
首先我需要创建数组纹理,它应该类似于:
glTextureStorage3D(textureId, 0, internalFormat, width, height, howManyCubeMaps);
假设只有一个 mipmap 级别。
我怎样才能将每个单独的纹理附加到这个纹理数组?
假设每个立方体贴图 ID 都在一个数组中,我想知道你是否可以这样做:
for(uint level=0; level<num_levels; level++)
glAttach(textureID, cubeID[level], level);
然后我不确定我应该如何在着色器端接收数据,而且 OpenGL wiki 上没有明确的文档
https://www.khronos.org/opengl/wiki/Cubemap_Texture#Cubemap_array_textures
How can I then attach each indidivual texture to this texture array?
数组纹理在 OpenGL 中不是这样工作的。这甚至不是数组 在 C++ 中的工作方式。想一想:如果您有 5 个 int
变量,则无法将那些 int
变量 "attach" 到 int array[5]
数组。唯一的解决方案是将这些变量的 value 复制到数组中的适当位置。在这个过程之后,你仍然有 5 int
个变量,它们与数组之间没有任何联系。
OpenGL 也是如此:您只能将那些立方体贴图纹理中的 数据 复制到立方体贴图数组纹理中的适当位置。 glCopyImageSubData
是这个过程的最佳选择。
假设我有许多立方体贴图纹理,我希望将它们作为立方体贴图数组纹理全部传递给 GPU。
首先我需要创建数组纹理,它应该类似于:
glTextureStorage3D(textureId, 0, internalFormat, width, height, howManyCubeMaps);
假设只有一个 mipmap 级别。
我怎样才能将每个单独的纹理附加到这个纹理数组?
假设每个立方体贴图 ID 都在一个数组中,我想知道你是否可以这样做:
for(uint level=0; level<num_levels; level++)
glAttach(textureID, cubeID[level], level);
然后我不确定我应该如何在着色器端接收数据,而且 OpenGL wiki 上没有明确的文档
https://www.khronos.org/opengl/wiki/Cubemap_Texture#Cubemap_array_textures
How can I then attach each indidivual texture to this texture array?
数组纹理在 OpenGL 中不是这样工作的。这甚至不是数组 在 C++ 中的工作方式。想一想:如果您有 5 个 int
变量,则无法将那些 int
变量 "attach" 到 int array[5]
数组。唯一的解决方案是将这些变量的 value 复制到数组中的适当位置。在这个过程之后,你仍然有 5 int
个变量,它们与数组之间没有任何联系。
OpenGL 也是如此:您只能将那些立方体贴图纹理中的 数据 复制到立方体贴图数组纹理中的适当位置。 glCopyImageSubData
是这个过程的最佳选择。