我是大标题

起因

lz闲的没事干想研究一下3d,然后转啊转啊转,就找到了pyglet 这个库,它甚至能用 shader,正巧我也不知道shader 是什么,于是又……(balabala)……总之现在我搞清楚为什么我导入的 obj 模型根本不受我创建的 shader 的影响了。

那么什么是pyglet

我不知道,我没用明白呢,憋问我,有人讲过了,有人搞出 Minecraft 的demo过了。

那么我这个问题是个什么问题

先贴上祸首,这是自带 obj 导入的解码器pyglet.model.codecs.obj中 class OBJModelDecoder的片段。
在这里插入图片描述

原理

在导入obj时这个解码器通过 parse_obj_file (pyglet.model.codecs.obj.parse_obj_file) 把 obj 文件解码成 list[Mesh](面片列表), 然后给面片上 shader, 这里能看出它给有 texture(贴图) 的上了一种,给没有的上了另一种。

于是

我从OBJModelDecoder继承了一个类,把 shader 换成了我自己的 shader,于是问题解决。

后续

但是我的 shader 的点光源 渲染出来总是感觉怪怪的,属于那种对了但不全对的感觉。等我搞定了高低再水一篇。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐