我目前面临着OpenGL采样器的一个问题。我有一个正在运行的片段着色器,它使用isampler2DArray
变量来采样一堆二维图像以及一个用于从堆栈中检索所需片的整数索引。OpenGL:isampler2DArray与sampler2DArray与sampler3DArray
片段着色器看起来是这样的:
#version 430
/* Per Fragment Input Attributes */
in vec2 texCoord;
/* Per Fragment Uniform Attributes */
layout (binding = 0) uniform isampler2DArray textureSampler;
/* Per Fragment Output Values */
layout (location = 0) out vec3 out_color;
uniform float windowCenter;
uniform float windowWidth;
uniform int texIndex;
void main()
{
float value = float(texture(textureSampler, vec3(texCoord, texIndex)).r);
float min = windowCenter - windowWidth/2;
value = (value - min)/windowWidth;
out_color = vec3(value);
}
当我试图改变采样器sampler2DArray
和统一变量来检索数据float
,我只得到一个黑色的屏幕,而不是抽样的质感。类似于sampler3D
。
纹理设置代码如下:
m_texture= std::make_unique<Texture>(GL_TEXTURE_2D_ARRAY, nullptr, sequence->width(), sequence->height(), sequence->images().size(), GL_R16I, GL_RED_INTEGER, 1, 0, GL_SHORT);
glPixelStorei(GL_UNPACK_ROW_LENGTH, sequence->width());
for (int i = 0; i < sequence->images().size(); i++)
{
m_texture->UpdateTexture(sequence->images()[i]->data(), 0, sequence->images()[i]->width(), 0, sequence->images()[i]->height(), i, 1);
}
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
为sampler2DArray
和sampler3D
,我上传了我的float
一致通过以下方式,根据该计算器问题(OpenGL 3D Texture Coordinates):
prg_texture3D->SetUniform("currentSliceTexCoord", (1.0f + 2.0f * currentSlice)/(2.0f * sequence->images().size()));
我我不明白为什么程序运行在isampler2DArray
而不是其他两个。你能否告诉我他们之间的区别,尤其是isampler2DArray
和sampler2DArray
之间的区别?
纹理类从哪里来?您是否正确设置了浮点纹理的最小/最大值滤镜? – BDL
这是我自己创建的一个自定义的。这两个值都设置为“GL_LINEAR”。 – Schnigges