我试图在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”)的最左侧最低像素。我需要立方体的每个面使用整个文件
答案 0 :(得分:1)
GL不知道如何将纹理映射到基元。 您需要在基元和纹理空间之间定义映射。一种方法是为每个顶点指定纹理坐标。
由于GL是一个状态机,当你不以每顶点方式设置某个属性的值时,它将使用为所有顶点设置的最后一个值,因此它会在整个图元的同一点采样纹理 - 只使用纹理的一个像素。
从这个问题来看,目前尚不清楚你是使用loegacy GL还是现代基于着色器的GL。我猜测你使用旧的固定功能管道而没有自编的着色器(否则,添加纹理可能根本就没有效果)。在这种情况下,请查看the chapter on texture mapping in the OpenGL red book。它应该解释使其发挥作用所需的基础知识。