2015-06-20 76 views
0

我試圖在pyglet中繪製一個基本的立方體,並對其應用紋理。我可以繪製立方體,但紋理只是我加載的文件中的一個像素。這裏是我如何加載紋理並設置它。Pyglet在繪製時使用整個紋理

self.texture = pyglet.image.load("texture.png").get_texture() 
self.batch.add(
      len(vertices)/3, gl_QUADS, self, 
      ("v3f" , vertices) 
     ) 

self.batch.draw() 

這將成功地繪製我想要的立方體,但紋理不是我想要的。僅顯示紋理文件(「texture.png」)中最低的最左邊像素。我需要立方體的每個面使用整個文件

回答

1

GL不知道如何將紋理映射到基元。 您需要在您的基元和紋理空間之間定義一個映射。一種方法是爲每個頂點指定紋理座標

由於GL是desgined狀態機,當你不設置一些屬性的值在每個頂點的方式,將用於頂點的所有設置的最後一個值,所以它會品嚐紋理在整個圖元的相同點上 - 只使用紋理的一個像素。

從這個問題來看,如果使用loegacy GL或基於現代着色器的GL,目前尚不清楚。我猜想您使用舊的固定功能管道沒有自己着色的着色器(否則,添加紋理可能根本沒有效果)。在這種情況下,看看the chapter on texture mapping in the OpenGL red book。它應該解釋讓這個工作起作用所需的基礎知識。