魔兽世界模型文件.m2 D3D下的渲染

 

魔兽世界模型文件众多,是我们用来测试程序的很好的资源。本文通过笔者的实践,分别用GPU和CPU两种方法实现m2文件的渲染。

M2文件的解析由国外一个社区完成,藉由此社区的帮助,诞生了像MyWarCraftStudio、wowmapview、wowmodelview这些读取并显示魔兽世界模型文件的程序,其中后两者的源代码可以下载到,但他们使用GL实现,参考这两款软件的源码,笔者实现了在D3D下的渲染。

首先,大略介绍一下m2文件的格式。M2文件存储了常规的顶点数据,纹理、法线数据,骨骼动画数据。当然还有许多其他数据,重点说的是它的骨骼数据,它不像.x那样通常存储的是每个关键点的骨骼变换矩阵,而是缩放、平移、旋转因子,在每帧动画中都根据时间计算出平移向量,旋转向量,缩放向量,根据这些向量来计算骨骼的变换矩阵,最后用这个矩阵变换顶点坐标。所以,在时间上m2文件比常规存储的.x文件更耗费时间,因为变换矩阵是通过实时计算得到的,而在空间上m2文件甚为小巧,400多K就能包含几十个动画。

其次,对于骨骼动画的渲染,dx sdk中介绍了一种基于骨骼调色板的混合技术,使用了shader实现。原理是:模型的某一顶点,可能受到几个骨骼的共同作用,每个骨骼的作用程度表示为一个权重,所有权重相加为1.所有骨骼的变换矩阵存储为一个矩阵数组(MatrixPalette),由cpu传给shader。具体如何确定骨骼变换矩阵,由顶点数据的一个DWORD确定。具体来说,m2文件的每个顶点最多由4个骨骼共同决定,那么每个骨骼的变换矩阵,都可以在MatrixPalette中找到,利用索引就可以了,该索引值占用一个字节,最大寻址128个骨骼矩阵,所以这种方法要求骨骼数不超过128个。DWORD是4个字节,而那4个骨骼矩阵的索引刚好从低位到高位合成了一个DWORD,所以在VS中可以把DWORD转换为int4类型,其分量x/y/z/w刚好就是那4个索引值。

如果模型文件的骨骼数超过128,就使用CPU计算。该段代码可以参照wowmapview或wowmodelview中Model::animate(int panim)方法。

最后,要注意GL和DX使用的矩阵和向量不同(当然还有左右手坐标系的不同)。GL使用的是列向量,DX使用的是行向量,GL和DX的矩阵互为逆矩阵。所以在看wowmapview或wowmodelview源码的时候一定要注意。

由于还有别的事情,像粒子系统、character以后再说,演示程序默认使用shader渲染,当骨骼数大于128或显卡不支持shader的话使用CPU计算。

窗口使用wxWidgets制作,非常喜欢wx,可用的人不多。

欢迎游戏公司联系笔者itlmy@163.com

魔兽世界模型文件.m2 在D3D下的渲染相关推荐

  1. OBJ模型文件的结构、导入与渲染

    在[3DS文件结构的初步认识]中提及了3DS格式模型文件.固然3DS格式很常用,但OBJ格式的模型也是很常见的,于是咔嚓了一下心,熟悉了一下格式,并写了一个导入OBJ格式模型的类,顺便有此文.--Zw ...

  2. 现代opengl 设计 3D模型文件导入显示

    利用3D模型导入库assimp, 可以读取很多种格式的3D模型文件,现在我们就用opengl 显示出来.而这需要一个桥,就是数据和opengl 显示,前文我们介绍了网格Mesh类,现在介绍model ...

  3. CGR模型文件如何转换成FBX格式文件

    最近,收到一个CGR的模型文件,想要转换成FBX格式问题并进行纹理贴图,搜了一圈,费了点时间,终于找到了窍门 1.首先新装个Pro-E 2.用Pro-E打开模型文件 3.选择另存为.stl文件 4.如 ...

  4. Tensorflow:TF模型文件(checkpoint文件夹下ckpt文件之data、index、meta)保存、模型导入、恢复并fine-tuning之详细攻略

    Tensorflow:TF模型文件(checkpoint文件夹下ckpt文件之data.index.meta)保存.模型导入.恢复并fine-tuning之详细攻略 目录 保存TF训练好的模型 1.T ...

  5. java m2文件放哪里_windows下打开.m2文件夹,没有找到setting.xml

    那就自己创建一个 手动创建本地仓库的存放路径,例如:D:\Java\m2\repository: 在windows的环境变量中增加了新的用户变量M2_REPO,其对应的值为D:\Java\m2\rep ...

  6. 电机振动噪声分析电机多转速工况下的NVH分析,有模型文件,教学视频

    电机振动噪声分析电机多转速工况下的NVH分析,有模型文件,教学视频 ID:69200636485462609

  7. python环境下,XGBoost模型文件转pmml格式用于部署

    一. python环境下生成PMML 1. sklearn接口的xgboost 需要用sklearn2pmml包来生成pmml文件,一共有两种方法: 方法一: 在管道pipeline中进行fit后保存 ...

  8. YOLOv5的pytorch模型文件转换为ONNX文件

    YOLOv5 YOLOv5下载与测试运行 导出ONNX格式文件 ONNX转为为IR中间格式 环境: Windows 10 Anaconda 2.0.4 OpenVINO 工具包 2021.2 Pyth ...

  9. python加载模型文件进行图片分类_tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式...

    Google提供了一个工具,TensorBoard,它能以图表的方式分析你在训练过程中汇总的各种数据,其中包括Graph结构. 所以我们可以简单的写几行Pyhton,加载Graph,只在logdir里 ...

  10. tensorflow打印模型图_从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)...

    最近看到一个巨牛的人工智能教程,分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.平时碎片时间可以当小说看,[点这里可以去膜拜一下大神的" ...

最新文章

  1. Windows SharePoint Services 3.0 应用程序模板
  2. pandas使用isna函数和any函数计算返回dataframe中包含缺失值的数据行(rows with missing values in dataframe)
  3. Docker存储和虚拟化存储需求不同
  4. 源服务器信息,软件源搭建
  5. java竖向菜单,垂直滑动菜单
  6. 5g pdu session_运营商下架4G套餐,用户被5G!
  7. webpack4.x中使用postcss-loader、autoprefixer给CSS属性自动添加前缀
  8. 现代软件工程 第3-6章 作业
  9. mysql5.5函数大全_mysql 函数大全
  10. DCEP | 农行将上线数字人民币刷脸支付
  11. php 创建zip,如何使用PHP ZipArchive创建zip文件并下载?
  12. delphi控件切图界面闪烁_ui界面切图方法
  13. OSChina 周三乱弹 —— 风扇写着先生请自爱
  14. java 生成ppt_Java 创建并应用幻灯片母版
  15. 某些网页页面偏左,什么原因?
  16. TEANMA(天玛)-公共广播系统中扬声器配置及相关注意事项解析
  17. 网络计算机组显示不全,快速解答win7系统网络邻居显示不全只能看到2台计算机的法子...
  18. 服务器不能用pe安装win7系统安装,使用PE安装win7系统失败了怎么办
  19. ui automator api 图解
  20. 全产业链核心升级 集聚创新大展宏图——慕尼黑华南电子展回顾

热门文章

  1. 常用汉字字体字号的介绍及选用原则
  2. win10千万不要重置_小白不要再用“一键重装系统”了,后果很严重!
  3. 阿里笔试7/29 9-10点场
  4. ds18b20工作原理和测温原理介绍
  5. 19年6月英语六级第二套听力单词
  6. 中兴B860AV2.1-T刷机教程加固件
  7. 计算机蓝屏原因原理,蓝屏炸弹
  8. 博弈论模型——Part 1
  9. 基于opencv的人脸识别
  10. 接口测试用例设计实践(含详细实例)