uv映射python OpenGL三角形

2024-04-19 19:55:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用pyOpenGL显示一个简单的即时模式的纹理多边形集,但没有运气。我把一些代码捆绑在一起,加载一些几何数据,所有的工作都很好,据我所知,我有所有的代码来添加纹理,但只是得到白色的多边形。在

以下是代码的重要部分:

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()

Tags: 代码imageselfnumpyimgdatabufferbit
1条回答
网友
1楼 · 发布于 2024-04-19 19:55:26

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

glEnable(GL_TEXTURE_2D)

此外,不应在每次绘制调用时创建纹理,应一次性创建纹理(使用glGenTextures和glTex*),然后存储纹理ID,并在绘制期间执行严格的最小值操作,即绑定纹理。在

^{pr2}$

不幸的是,我现在不能尝试答案,所以这完全是我的想法。 你可能会从上一篇文章中受益: Render a textured rectangle with PyOpenGL

相关问题 更多 >