2012-02-02 198 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