2012-02-02 35 views
1

私は運がないpyOpenGLで単純な即時モードのテクスチャ付きポリゴンのセットを表示しようとしています。私はいくつかのジオメトリデータをロードするいくつかのコードをまとめました。すべてがうまく動作し、テクスチャを追加するコードがすべてありますが、白いポリゴンを取得するだけです。uvマッピングpython OpenGL三角形

は、ここでは、コードの重要なビットです:また、あなたはあなたがすべき、各ペイントコールにテクスチャを作成しないでください

glEnable(GL_TEXTURE_2D) 

を:

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でテクスチャを有効にしていません(glGenTextures、glTex *を使用して)一度作成してからテクスチャIDを保存し、テクスチャにバインドしているペイント中に厳密な最小値を設定します。

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を呼び出すたびにまだメモリがリークしている –

+0

メモリリークはpyOpenGLの最新ビルドのバグでした... –

関連する問題