2012-10-08 55 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