我正在开发一个图形项目,涉及使用3D纹理对以直线网格形式存储的数据进行一些体积渲染,我对宽度,高度和深度参数感到有些困惑。 glTexImage3D。对于一维纹理,我知道你可以使用这样的东西:
glTexImage1D(GL_TEXTURE_1D,0,GL_RGB,256,0,GL_RGB,GL_UNSIGNED_BYTE,数据);
其中宽度是每个颜色流的256个可能值。在这里,我仍然使用无符号字节形式的颜色(这里纹理的主要目的仍然是插入网格中点的颜色以及透明度),所以这对我来说很有意义其中一个参数仍然是256.它是一个64 X 64 X 64网格,所以它的一个参数(可能是深度?)是64是有意义的,但我不确定第三,或者即使我在那里正确的轨道。任何人都可以告诉我正确使用这三个参数?我查看了这两个讨论,但仍然感到困惑:
答案 0 :(得分:2)
看起来你误解了1D案件。在您的示例中,256是1D纹理的大小,即纹素的数量。
每个颜色分量的可能值数量由内部格式给出,即第三个参数。 GL_RGB
实际上将其留给实现颜色深度应该是什么。它支持向后兼容旧代码。如果为内部格式指定大小为GL_RGB8
的格式,则会更清楚,内部格式请求每个颜色分量8位,这对应于R,G和B各256个可能的值。
对于3D情况,如果您需要64 x 64 x 64网格,则只需在3个维度(宽度,高度和深度)中为每个维度指定64。假设这个大小,使用RGBA和8位的颜色深度,调用是:
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA8, 64, 64, 64, 0,
GL_RGBA, GL_UNSIGNED_BYTE, data);