簡體   English   中英

glTexImage2D(條紋紋理)的OpenGL(pyglet)問題

[英]OpenGL (pyglet) issue with glTexImage2D (striped texture)

嘗試使用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_LUMINANCE是單個組件圖像格式,此處組件的大小為1字節( glTexImage2D (...) GL_UNSIGNED_BYTE glTexImage2D (...) )。

實際上,您實際上僅對每4個像素中的一個賦予顏色,因為您正在創建GLuint數組(其中最高的24位全為0 ),然后告訴GL您正在為其傳遞GLubyte數組。

要解決此問題,您需要更改:

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

為此:

pix = (GLubyte * len(pix))(*pix)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM