2012-02-02 108 views
1

我试图用pyOpenGL显示一个简单的立即模式纹理多边形集合,没有运气。我已经将一些加载一些几何数据的代码捆绑在一起,并且所有工作都很好,并且据我所知,我有所有代码都可以为其添加纹理,但只是获得了白色多边形。uv mapping python OpenGL三角形

下面的代码的重要位:

self.img = PIL.Image.open('/projects/openGL_robot_face/facemap.png') 
self.image_data = numpy.array(list(self.img.getdata()), numpy.uint8) 

def paintGL(self): 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 


    texture = glGenTextures(1) 
    glPixelStorei(GL_UNPACK_ALIGNMENT,1) 
    glBindTexture(GL_TEXTURE_2D, texture) 
    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_MAG_FILTER, GL_LINEAR) 
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, self.img.size[0], self.img.size[1], 0, GL_RGB, GL_UNSIGNED_BYTE, self.image_data) 

    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity() 
    glTranslate(0.0, 0.0, -50.0) 
    glScale(20.0, 20.0, 20.0) 
    glRotate(self.yRotDeg, 0.2, 1.0, 0.3) 
    glTranslate(-0.5, -0.5, -0.5) 

    glBegin(GL_TRIANGLES) 
    for vert in self.poly_verts: 
     glTexCoord2f(vert[6], vert[7]) 
     glVertex3f(vert[0], vert[1], vert[2]) 

    glEnd() 

回答

2

是否启用纹理在OpenGL中,使用:

glEnable(GL_TEXTURE_2D) 

而且,你不应该建立在每个涂料通话纹理,你应该(glGenTextures和glTex *)创建它,然后存储纹理ID,并在与纹理绑定的Paint中执行严格的最小值。

def paintGL(self): 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 

    glEnable(GL_TEXTURE_2D) 
    glBindTexture(GL_TEXTURE_2D, texture) 

    glMatrixMode(GL_MODELVIEW) 
    glLoadIdentity() 
    glTranslate(0.0, 0.0, -50.0) 
    glScale(20.0, 20.0, 20.0) 
    glRotate(self.yRotDeg, 0.2, 1.0, 0.3) 
    glTranslate(-0.5, -0.5, -0.5) 

    glBegin(GL_TRIANGLES) 
    for vert in self.poly_verts: 
     glTexCoord2f (vert[6], vert[7]); 
     glVertex3f(vert[0], vert[1], vert[2]) 

    glEnd() 
    glDisable(GL_TEXTURE_2D) 

不幸的是,我现在不能尝试答案,所以这完全是从我的头顶。 你也许可以从这个以前的帖子中受益: Render a textured rectangle with PyOpenGL

+0

是的,你说得对,glEnable(GL_TEXTURE_2D)固定它,我感动的纹理加载圈外的,因为我意识到这是一个严重的内存泄露!问题是,即时我仍然在内存泄漏每次我在调用glTexCoord2f内循环 – 2012-02-02 12:51:33

+0

内存泄漏是pyOpenGL的最新版本中的一个错误...花了一段时间,以找出一个 – 2012-02-03 10:23:53