Python 在pyglet/opengl中渲染纹理立方体的最有效方法
目前,我有这个代码,它渲染一个纹理立方体。它只需要几个立方体就可以了,但当我添加数百个立方体时,创建它需要花费很长时间Python 在pyglet/opengl中渲染纹理立方体的最有效方法,python,opengl,pyglet,Python,Opengl,Pyglet,目前,我有这个代码,它渲染一个纹理立方体。它只需要几个立方体就可以了,但当我添加数百个立方体时,创建它需要花费很长时间 def get_tex(file): tex = pyglet.image.load(file).get_texture() glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FIL
def get_tex(file):
tex = pyglet.image.load(file).get_texture()
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
return pyglet.graphics.TextureGroup(tex)
def make_textures(textures):
result = {}
base = "imgs/"
faces = ("left", "right", "top", "bottom", "front", "back")
for face in faces:
file_name = textures.get(face, textures.get("side"))
result[face] = get_tex(base + file_name)
return result
def get_vertices(x, y, z):
dx, dy, dz = x + 1, y + 1, z + 1
return [
(x, y, z, x, y, dz, x, dy, dz, x, dy, z), # side
(dx, y, dz, dx, y, z, dx, dy, z, dx, dy, dz), # side
(x, dy, dz, dx, dy, dz, dx, dy, z, x, dy, z), # top
(x, y, z, dx, y, z, dx, y, dz, x, y, dz), # bottom
(dx, y, z, x, y, z, x, dy, z, dx, dy, z), # side
(x, y, dz, dx, y, dz, dx, dy, dz, x, dy, dz), # side
]
class Grass:
textures = make_textures({"side": "grass_side.png", "top": "grass_top.png", "bottom": "dirt.png"})
def draw_block(self, block):
position = (block.x,block.y,block.z)
if block._type == "grass":
block = Grass
else:
block = Grass
vertices = get_vertices(*position)
faces = ("left", "right", "top", "bottom", "front", "back")
for vertex, face in zip(vertices, faces):
self.batch.add(
4,
gl.GL_QUADS,
block.textures[face],
("v3f/static", vertex),
("t2f/static", (0, 0, 1, 0, 1, 1, 0, 1)),
)
但这需要很长的时间才能创建,我不能使用其他线程来完成,因为我正在调用gl函数。不确定函数名是否与它的功能相符。但不要在每个渲染帧上绘制块。我希望/假设您已经知道这一点。不确定函数名是否与它的功能相符。但不要在每个渲染帧上绘制块。我希望/假设你已经知道这一点。