为什么我不能在pyopengl中绘制纹理? [英] Why can't I draw a texture in pyopengl?

查看:426
本文介绍了为什么我不能在pyopengl中绘制纹理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经历了很多教程,但仍然无法弄清楚我做错了什么。如果我禁用纹理,它会正确绘制一个白色立方体,但是当我启用纹理时,它不会绘制任何东西(或者黑色正方形与背景相同)。我唯一怀疑的是GL_INT,因为到目前为止我只在项目中使用了无符号字节。在此先感谢。



编辑:我的窗口是RGB



这是我的代码:



 self.texture = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT,1)
glPixelStorei(GL_PACK_ALIGNMENT,1)
glBindTexture(GL_TEXTURE_2D,self.texture)
pix = [255,255,255,0,0,055,555,255,0,0,0]
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho (0.0,640,480,0.0,0.0,100.0)
glMatrixMode(GL_MODELVIEW)
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP)
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP)
glTexParameterf (GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_DECAL)
glTexImage2D(GL_TEXTURE_2D,0,3,2,2,0,GL_RGB ,GL_INT,pix)
glEnable(GL_TEXTURE_2D)
glDisable(GL_LIGHTING)
glBegin(GL_QUADS);
glTexCoord2i(0,0); glVertex2i(100,100)
glTexCoord2i(0,1); glVertex2i(100,200)
glTexCoord2i(1,1); glVertex2i(200,200)
glTexCoord2i(1,0); glVertex2i(200,100)
glEnd()
glutSwapBuffers()

解决方案

好的,我通过反复试验发现阵列需要是3D。这个数组适合我(3 * 4 * 3维)我用glTexImage2Df:



pix = [[[1.0,1.0,0.0],[0.0, 0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0]],[[1.0,1.0,1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0, 0.0,0.0]],[[1.0,1.0,1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0]]]

I've gone through many tutorials and still I can't figure out what I'm doing wrong. If I disable textures it correctly draws a white cube but when I enable textures it draws nothing (or black square same color as background). The only thing I suspect is GL_INT because up to this point I have only been using unsigned byte in my projects. Thanks in advance.

Edit: my window is RGB

Here is my code:

self.texture = glGenTextures(1)
glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
glBindTexture(GL_TEXTURE_2D, self.texture)
pix=[255,255,255,0,0,0,255,255,255,0,0,0]
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, 640, 480, 0.0, 0.0, 100.0)
glMatrixMode(GL_MODELVIEW)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP)
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)
glTexImage2D(GL_TEXTURE_2D, 0, 3, 2, 2, 0, GL_RGB, GL_INT, pix)
glEnable(GL_TEXTURE_2D)
glDisable( GL_LIGHTING)
glBegin(GL_QUADS);
glTexCoord2i(0, 0); glVertex2i(100, 100)
glTexCoord2i(0, 1); glVertex2i(100, 200)
glTexCoord2i(1, 1); glVertex2i(200, 200)
glTexCoord2i(1, 0); glVertex2i(200, 100)
glEnd()
glutSwapBuffers()

解决方案

Ok, I found out through trial and error that the array needs to be 3D. This array worked for me (3*4*3 dimensions) I used glTexImage2Df with this:

pix=[[[1.0,1.0,0.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0]],[[1.0,1.0,1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0]],[[1.0,1.0,1.0],[0.0,0.0,0.0],[1.0,1.0,1.0],[0.0,0.0,0.0]]]


这篇关于为什么我不能在pyopengl中绘制纹理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆