Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl 如何确定glTexImage3D的维度参数?_Opengl_Textures - Fatal编程技术网

Opengl 如何确定glTexImage3D的维度参数?

Opengl 如何确定glTexImage3D的维度参数?,opengl,textures,Opengl,Textures,我正在做一个图形项目,涉及使用3D纹理对以直线网格形式存储的数据进行体绘制,我对GLTEXAGE3D的宽度、高度和深度参数有点困惑。对于1D纹理,我知道可以使用如下内容: GLTEXAGE1D(GL_纹理_1D,0,GL_RGB,256,0,GL_RGB,GL_无符号_字节,数据) 其中,宽度是每个颜色流的256个可能值。在这里,我仍然使用无符号字节形式的颜色(这里纹理的主要目的仍然是插值网格中点的颜色,以及透明度),因此对我来说,其中一个参数仍然是256是有意义的。这是一个64 X 64 X

我正在做一个图形项目,涉及使用3D纹理对以直线网格形式存储的数据进行体绘制,我对GLTEXAGE3D的宽度、高度和深度参数有点困惑。对于1D纹理,我知道可以使用如下内容:

GLTEXAGE1D(GL_纹理_1D,0,GL_RGB,256,0,GL_RGB,GL_无符号_字节,数据)

其中,宽度是每个颜色流的256个可能值。在这里,我仍然使用无符号字节形式的颜色(这里纹理的主要目的仍然是插值网格中点的颜色,以及透明度),因此对我来说,其中一个参数仍然是256是有意义的。这是一个64 X 64 X 64的网格,所以其中一个参数(可能是深度?)应该是64是有意义的,但我不确定第三个参数,甚至不确定我是否在正确的轨道上。有人能告诉我如何正确使用这三个参数吗?我看了这两个讨论,但还是感到困惑:


看来您误解了1D案例。在您的示例中,256是1D纹理的大小,即纹理的数量

每个颜色组件的可能值数量由内部格式(第三个参数)给出
GL_RGB
实际上,颜色深度应由实现决定。它支持与旧代码向后兼容。如果您为内部格式指定一种大小相同的格式,如
GL\u RGB8
,则会更清晰,它要求每个颜色分量8位,对应于R、G和B的256个可能值

对于三维情况,如果需要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);

我懂了。我想这只是一个令人高兴的巧合,使用glTexImage1D调用之前是有效的。将每个参数设置为64实际上是我尝试的第一件事,但它只是给了我一个完全黑屏。到目前为止,给我最好图像的是使用这些:GLTEXAGE3D(GL_纹理_3D,0,GL_RGB,16,256,64,0,GL_RGB,GL_无符号_字节,RGB颜色);我应该注意,它是一个规则网格(即,它使用规则间距),但它不是一个单位网格。不过,我正在尝试将我的glTexCoord3f格式化为一个。这对于RGB值为16x256x64的网格是正确的。你说你有透明胶片,所以我想你可能有RGBA数据。对于体绘制来说,使用仅包含强度的单通道数据,并使用传递函数将其映射到颜色,这实际上更为常见。但这实际上取决于输入数据的格式。最后,它看起来应该是这样的:)关于透明胶片,你的假设是正确的-我只是想在添加透明胶片之前让颜色正常工作。我实际上也在使用传递函数,*数据参数来自于我将其应用于网格上点的字段值。啊,我没想到更改这些参数会影响我需要的相机设置。我认为这实际上是我的主要错误之一。谢谢,雷托。你打算如何从3D纹理渲染日期。OpenGL 3D纹理不是“神奇的”体积光栅化器。绘制常规OpenGL图元时,可以从体积中剪切“切片”,但不会自动进行体积渲染。要做到这一点,您必须实现某种类型的体积光线投射器或类似装置。“其中宽度是每个颜色流的256个可能值”-完全误解了它的作用。
width
(以及高度和深度)参数告诉您要为纹理分配多少像素。