我能够得到一个.obj格式的3D模型,但我不知道如何在屏幕上绘制它。这是我的代码。
import pyglet
model = pyglet.resource.model('untitled.obj')
window = pyglet.window.Window()
@window.event
def on_draw():
window.clear()
model.draw()
pyglet.app.run()
但它输出了这个错误
pyglet.gl.lib.GLException: b'\xed\xe5\xe4\xee\xef\xf3\xf1\xf2\xe8\xec\xee\xe5 \xe7\xed\xe0\xf7\xe5\xed\xe8\xe5'
如果你做以下操作
model = pyglet.resource.model('untitled.obj')
print(model)
输出。
<pyglet.model.Model object at 0x02E356E8>
我很确定pyglet是为二维的东西而生的。在 .draw()
函数光栅化2d图像的像素,但对于3d模型,甚至一个简单的立方体,需要更复杂的渲染方法。你可能需要为这个项目写更多的代码。一个简单的方法可能是raycast,就像在最初的毁灭战士游戏中一样,它可以提供非常简单的3D图形,可以有纹理。不幸的是,这种方法使得复杂的形状变得不可能,你必须在你的项目中对所有的模型进行编码,而不是使用外部资源,如blender。有许多方法可以将一个3D模型压缩成一个2D图像,但一个 .draw()
根据你正在制作的游戏程序,你可能会想要使用raycasting或其他方法,但我建议使用其他游戏引擎来创建3D游戏。Unity是一个很好的例子,虚幻引擎也是。