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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.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
Python OpenGL(pyglet)与glTexImage2D(条纹纹理)的问题_Python_Opengl_Fragment Shader_Vertex Shader_Pyglet - Fatal编程技术网

Python OpenGL(pyglet)与glTexImage2D(条纹纹理)的问题

Python OpenGL(pyglet)与glTexImage2D(条纹纹理)的问题,python,opengl,fragment-shader,vertex-shader,pyglet,Python,Opengl,Fragment Shader,Vertex Shader,Pyglet,尝试使用glTexImage2D()将编程生成的置换贴图传递给顶点着色器,但由于某些原因,顶点似乎无法从上传的图像中获得统一的值,即使上传的数组中的每个值都相同 python代码如下所示: pix = [] for x in range(256): for y in range(128): pix.append(200) # pix is just [200, 200, 200, ...] pix = (GLuint * len(pix))(*pix) disp_t

尝试使用
glTexImage2D()
将编程生成的置换贴图传递给顶点着色器,但由于某些原因,顶点似乎无法从上传的图像中获得统一的值,即使上传的数组中的每个值都相同

python代码如下所示:

pix = []
for x in range(256):
    for y in range(128):
        pix.append(200)  # pix is just [200, 200, 200, ...]

pix = (GLuint * len(pix))(*pix)

disp_tex_id = GLuint(0)
glGenTextures(1, byref(disp_tex_id))

glActiveTexture(GL_TEXTURE1)
glEnable(GL_TEXTURE_2D)
glBindTexture(GL_TEXTURE_2D, disp_tex_id)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)

glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 256, 128, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, pix)

shader.uniformi('disp_texture', 1)
相关着色器代码如下所示:

[vertex]
#version 110
#extension GL_EXT_gpu_shader4 : require

uniform sampler2D disp_texture;

varying vec4 dispColor;

void main() {
  gl_TexCoord[0] = gl_MultiTexCoord0;

  dispColor = texture2D(disp_texture, gl_TexCoord[0].st);
}

[fragment]
#version 110
varying vec4 dispColor;

void main() {
  gl_FragColor = dispColor;
}
我目前只是将球体上的位移显示为颜色值,但它不是一个均匀的灰色球体,而是条带化的。

您正在经历的条带化是由于您的
pix
数组中的数据大小不正确造成的。
GL\u LUMINANCE
是一种单分量图像格式,此处的分量大小为1-字节(
glTexImage2D(…)
中的
GL\u UNSIGNED\u byte

实际上,您只为每4个texel中的一个赋色,因为您正在创建一个
GLuint
s数组(其中最高24位都0),然后告诉GL您正在传递一个
GLubyte
数组

要解决此问题,您需要更改: 对此,请改为:
另外,它不应该是:
pix=(GLubyte*len(pix))(*pix)
?@AndonM.Coleman它是写给gl_职位的,我只是觉得它与我的问题无关。GLubyte错误正是导致错误的原因,所以谢谢!
pix = (GLuint * len(pix))(*pix)
pix = (GLubyte * len(pix))(*pix)