【问题标题】:texture coordinates using vertex_list_indexed in pyglet在 pyglet 中使用 vertex_list_indexed 的纹理坐标
【发布时间】:2014-05-15 16:10:14
【问题描述】:

我不熟悉在 pyglet(通常是 OpenGL)中使用纹理,我被一些可能是愚蠢的错误所困扰:我正在尝试将从 png 图像派生的纹理应用于组成的正方形的两个三角形。我可以成功地使用索引顶点列表来定义几何图形,但是当我为每个三角形的每个顶点指定纹理坐标 (u,v) 时,我得到:

回溯(最近一次通话最后一次):
模块中的文件“test_tex.py”,第 37 行
('t2f', texture_coords))
ValueError:只能分配相同大小的序列

建议我的纹理坐标列表大小不正确。有人看到问题了吗?一篇对我没有太大帮助的相关帖子:Triangle texture mapping OpenGL

请在下面查看我的代码以获取详细信息,谢谢!

import pyglet

config = pyglet.gl.Config(sample_buffers=1, samples=4,
                      depth_size=16, double_buffer=True)
window = pyglet.window.Window(resizable=True, config=config, vsync=True)

# create vertex data
num_verts = 4
side_length = 1.0
half_side = side_length / 2.0

# vertex positions of a square centered at the origin,
# ordered counter-clockwise, starting at lower right corner
vertex_positions = [ half_side,  -half_side,
                     half_side,   half_side,
                    -half_side,   half_side,
                    -half_side,  -half_side]

# six pairs of texture coords, one pair (u,v) for each vertex
# of each triangle
texture_coords = [1.0, 0.0,
                  1.0, 1.0,
                  0.0, 1.0,
                  0.0, 1.0,
                  0.0, 0.0,
                  1.0, 0.0]

# indices of the two triangles that make the square
# counter-clockwise orientation
triangle_indices = [0, 1, 2,
                    2, 3, 0]

# use indexed vertex list
vertex_array = pyglet.graphics.vertex_list_indexed(num_verts,
                                                   triangle_indices,
                                                   ('v2f', vertex_positions),
                                                   ('t2f', texture_coords))

# enable face culling, depth testing
pyglet.gl.glEnable(pyglet.gl.GL_CULL_FACE)
pyglet.gl.glEnable(pyglet.gl.GL_DEPTH_TEST)

# texture set up
pic = pyglet.image.load('test.png')
texture = pic.get_texture()
pyglet.gl.glEnable(texture.target)
pyglet.gl.glBindTexture(texture.target, texture.id)

# set modelview matrix
pyglet.gl.glMatrixMode(pyglet.gl.GL_MODELVIEW)
pyglet.gl.glLoadIdentity()
pyglet.gl.gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0)

@window.event
def on_resize(width, height):
    pyglet.gl.glViewport(0, 0, width, height)
    pyglet.gl.glMatrixMode(pyglet.gl.GL_PROJECTION)
    pyglet.gl.glLoadIdentity()
    pyglet.gl.gluPerspective(45.0, width / float(height), 1.0, 100.0)
    return pyglet.event.EVENT_HANDLED

@window.event
def on_draw():
    window.clear()
    vertex_array.draw(pyglet.gl.GL_TRIANGLES)

pyglet.app.run()

【问题讨论】:

    标签: opengl textures pyglet


    【解决方案1】:

    这可能是在抱怨,因为您有 6 组纹理坐标,但只有 4 个顶点。您需要每个顶点的纹理坐标,因此您的 texture_coord 数组中应该有 4 对浮点数:

    texture_coords = [1.0, 0.0,
                      1.0, 1.0,
                      0.0, 1.0,
                      0.0, 0.0]
    

    【讨论】:

      猜你喜欢
      • 2014-11-25
      • 2021-05-09
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多