在应用于OpenGL中的多边形后,纹理看起来有些模糊

时间:2016-11-28 14:12:09

标签: python macos opengl textures pyopengl

最近我一直在试验OpenGL,现在我正在尝试 在简单形状上应用一些纹理,在这种情况下为GL_POLYGON。 问题是结果看起来有点模糊,含糊不清,而且我已经没有可能导致这个问题。

我正在尝试使用的纹理

enter image description here

# -*- coding: UTF-8 -*-

import math

from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *
from PIL import Image


width, height = 640, 480


def init():
    glEnable(GL_DEPTH_TEST)
    glClearColor(0.0, 0.0, 0.0, 0.0)
    gl_ortho()


def gl_ortho():
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()


def display():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glViewport(0, 0, width, height)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    im = Image.open('glass_texture.png')
    try:
        ix, iy, image = im.size[0], im.size[1], im.tobytes("raw", "RGB", 0, -1)
    except SystemError:
        ix, iy, image = im.size[0], im.size[1], im.tobytes("raw", "RGBX", 0, -1)

    texture_id = glGenTextures(1)
    glBindTexture(GL_TEXTURE_2D, texture_id)
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1)
    glTexImage2D(
        GL_TEXTURE_2D, 0, 3, ix, iy, 0,
        GL_RGBA, GL_UNSIGNED_BYTE, image
    )
    glEnable(GL_TEXTURE_2D)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL)

    glBindTexture(GL_TEXTURE_2D, texture_id)

    glPushMatrix()
    glBegin(GL_POLYGON)
    glTexCoord2f(0.0, 1.0)
    glVertex3f(-0.5, 0.5, 0.0)
    glTexCoord2f(1.0, 1.0)
    glVertex3f(0.5, 0.5, 0.0)
    glTexCoord2f(1.0, 0.0)
    glVertex3f(0.5, -0.5, 0.0)
    glTexCoord2f(0.0, 0.0)
    glVertex3f(-0.5, -0.5, 0.0)
    glEnd()
    glPopMatrix()

    glutSwapBuffers()
    glFlush()


if __name__ == '__main__':
    glutInit()
    glutInitWindowSize(width, height)
    glutCreateWindow('Textures')
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH)
    glutDisplayFunc(display)
    glutIdleFunc(display)
    init()
    glutMainLoop()

结果

enter image description here

1 个答案:

答案 0 :(得分:3)

所以我终于找到了问题的根本原因。

下面的一行
settings.py

应替换为

im = Image.open('brick_texture.jpg')

然后,应该在没有任何参数的情况下调用im = Image.open('brick_texture.jpg').convert('RGBA') 方法之下的几行

tobytes