2012-10-08 25 views
1

我想使用opengl函数将一个纹理映射到pyglet中的四元组,但四元组只显示为白色。将纹理映射到四元组opengl和pyglet

我的代码如下所示:

import pyglet 
from pyglet.gl import * 

glEnable(GL_TEXTURE_2D) 
image = pyglet.image.load("redbrick.png") 
texture = image.get_texture() 

,我的绘制函数:

def on_draw(): 
    window.clear() 

    glBindTexture (GL_TEXTURE_2D, 13) 
    glBegin (GL_QUADS); 
    glTexCoord2i (0, 0) 
    glVertex2i (0, 0) 
    glTexCoord2i (1, 0) 
    glVertex2i (100, 0) 
    glTexCoord2i (1, 1) 
    glVertex2i (100, 100) 
    glTexCoord2i (0, 1) 
    glVertex2i (0, 100) 
    glEnd() 

有什么我做错了或丢失了它要绘制的白色四?

回答

3

我看到一些可能错误的东西。这将是很高兴有像pastebin完整的代码,但我不能评论,所以要...

你的纹理需要被制作成一个opengl纹理。您需要先将图像转换为原始数据格式。当你加载图像时,将image.get_data()压缩到下面的一行中。这不是最有效的方式,而是一个简单的例子。

绑定纹理设置绘图参数后。

然后将数据交给glTexImage2D中的视频卡。

data=pyglet.image.load("redbrick.png").get_data() 
texture_id = glGenTextures(1) 
glBindTexture(GL_TEXTURE_2D, texture_id) 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (image_width), (image_height), 0, GL_RGBA, GL_UNSIGNED_BYTE, data) 

之后,如果使用texture_id绑定,则应该可以使用此纹理。 13我可以看到任何东西。提供所有的代码,我可以修改。

+0

感谢您的好回答,这真的很有帮助。完整的代码在这里:http://pastebin.com/naw7wXs5(在做任何修改之前) – user1237200

+0

它告诉我get_data()需要2个参数:/我为此使用了什么? – user1237200

+0

我得到了现在排序,但我得到了glBindTexture(GL_TEXTURE_2D,texture_id)行的“错误类型”错误。它现在看起来像这样:http://pastebin.com/djCM8vvn – user1237200