经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 软件/图像 » OpenGL » 查看文章
【NET 7.0、OpenGL ES】使用Silk.NET渲染MMD,并实时进行物理模拟。
来源:cnblogs  作者:o王先生o  时间:2023/9/20 9:34:50  对本文有异议

有关mmd播放器,网上也有许多非常漂亮的实现,如 pmxeditor、saba、blender_mmd_tools等等。。

首先我想先介绍下我参考实现的仓库:

sselecirPyM/Coocoo3D: Experimental MMD renderer using DX12 and DXR. (github.com),这是sselecirPyM大神使用NET 6.0和DX12实现的mmd渲染器,支持自定义渲染管线、光照等,感兴趣的小伙伴可以在b站找他的视频,搜名字就好。

benikabocha/saba: OpenGL Viewer (OBJ PMD PMX) (github.com),这是国外一名大神使用c++做的mmd渲染器,支持卡通光照,我的代码基本上参考该仓库。

接下来我介绍下渲染的实现流程,方便大家熟悉代码。

mmd模型存在多种文件格式:

pmx、pmd属于模型文件,里面包含模型的最基本信息,顶点、Mesh、骨骼、材质等等。。

vmd属于动画文件,包含每一帧动画要做的处理,但vmd不能单独使用,他必须有一个模型作为载体。

代码流程:

1. 解析模型、动画文件。(PmxParsing、VmdParsing).cs

2. 管理该模型数据。(MMDModel、PmxModel).cs

3. 管理动画数据。(VmdAnimation、VmdAnimationController).cs

4. 管理模型的物理信息。(MMDRigidBody、MMDJoint、MMDPhysics、MMDPhysicsManager).cs

5. 使用动画类对模型进行控制 VmdAnimation->MMDModel。

6. 进行物理模拟 MMDPhysicsManager->MMDModel。

7. 更新顶点数据并渲染 MMDModel->Update->Draw。

具体有关gles的渲染流程就不介绍了,非常简单。

1. 遍历所有的meshes进行模型绘制,绑定纹理、shader参数等等。。

2. mmd模型存在描边,所以接下来我们再根据meshes绘制一遍(注意切换shader)

3. 根据光照方向创建阴影矩阵,并在meshes里与模型矩阵相乘并进行绘制。

效果图:

 

 仓库地址:qian-o/SabaSharp (github.com)

原文链接:https://www.cnblogs.com/xymfblogs/p/17712441.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号