уф картографирование питона OpenGL треугольники - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь отобразить простой непосредственный режим наборов текстурированных полигонов с 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()

1 Ответ

2 голосов
/ 02 февраля 2012

Вы включили текстуры в OpenGL, используя:

glEnable(GL_TEXTURE_2D)

Кроме того, вы не должны создавать текстуру при каждом вызове Paint, вы должны создать ее раз и навсегда (с помощью glGenTextures и glTex *), затем сохранить идентификатор текстуры и выполнить строгий минимум во время 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)

К сожалению, я не могу попробовать ответ прямо сейчас, так что это чисто из головы. Возможно, вы могли бы извлечь выгоду из этого предыдущего поста: Визуализация текстурированного прямоугольника с помощью PyOpenGL

...