【发布时间】:2019-09-27 21:52:43
【问题描述】:
我正在尝试通过使用 PyOpenGL 的 Python 程序向片段着色器提供对标量数据的 3 维数组的访问。
在片段着色器中,我声明了一个 3d 采样器制服
uniform sampler3D vol;
在 Python 程序中,我有以下代码来设置标量 3d 纹理
vol = numpy.random.rand(3, 3, 3).astype(np.float32)
texture = glGenTextures(1)
glUniform1i(glGetUniformLocation(program, "vol"), 0)
glActiveTexture(GL_TEXTURE0 + 0)
glBindTexture(GL_TEXTURE_3D, texture)
glTexImage3D(GL_TEXTURE_3D, 0, GL_RED, 3, 3, 3, 0, GL_RED, GL_FLOAT, vol)
glEnable(GL_TEXTURE_3D)
但是,无论我从采样器的哪个位置获取值,例如
color = texture(vol, vec3(0, 0, 0));
看来我总是得到黑色 (0, 0, 0)。
我做错了什么?
我知道我的片段着色器的基本设置是有效的,即如果我写 color = vec3(1, 0, 0) 我会得到红色像素。
我也知道没有 OpenGL 错误,因为我在运行程序时使用了 glutInit() 处理的选项 -glerror,这导致 OpenGL 错误被转换为 Python 异常。
【问题讨论】:
标签: python opengl glsl fragment-shader