基于 DirectX11 的 MMDViewer 01-简介
这个项目主要是为了 DirectX11 而来,前面做了一个关于 OpenGL 的项目,这次打算使用 DirectX11 来做一个 MMD 的模型浏览器。以前,我使用过 DirectX11 来做过一些项目,但都半途而废了。在做完 Simple2D 后,现在决定使用 DirectX11 来做一个简单的模型浏览器——MMDViewer。
当然,这个项目究竟会怎么样我也不清楚,里面涉及到的很多知识我以前也没有学习过。就像 Simple2D 那样,本来打算花一两周完成的,后来发现它超出了我的知识范围。中间都是不断搜索其他人的文章或源码来完成的,结果完成 Simple2D 时花费了几个月。
项目介绍
类似 Mikumikudance 这个软件,不过功能和效果没有这么好。主要的目的是 DirectX11 的学习,实现功能如下:
1、pmd、pmx 3D模型的显示
2、模型的骨骼动画和摄像机动画
下面是整个项目的类图:

项目大纲:
一、搭建 DirectX11 渲染框架
这部分只是搭建一个简易的框架,渲染出一个立方体即可。考虑到有不太了解 DirectX11 的人,打算在这部分做一个 DirectX11 的教程。其实也不算教程,只是将我学习 DirectX11 的经验分享出来。在第二部分,我会完善这个框架。
二、MMD 模型的解析和渲染
在网络上你很难找到有关 pmd、pmx、vmd 等文件解析的文章,不过幸运的是,你能找到一份解析它们的源码:itsuhane 的 mmd 库。有了3D模型的数据,接下来就使用 DirectX11 进行渲染。为此需要对第一部分的框架进行扩展,包括:纹理的读取、着色器的封装、摄像机的设计。只有将框架搭建好了,才能进行第三部分的内容。
三、骨骼动画和变形(表情)动画
这里包括三个部分的动画:骨骼动画、变形动画和摄像机动画。骨骼动画的实现,依靠读取 vmd 动作数据驱动模型,设计模型骨骼时包括 FK 和 IK,其中 IK 是最难的一部分。变形动画主要是对顶点的操纵,所以设计渲染框架时要将顶点的位置数据和其他数据(法线、纹理坐标、骨骼数据)分开。摄像机动画实现不难,就看你的摄像机怎样设计了。
四、使用 ImGui 制作界面
最后一部分就是建立简单的界面,实现模型的选择等,比较简单。这里选用了 ImGui 库,学习简单。
软件展示

目录(更随文章的更新)
01、基于 DirectX11 的 MMDViewer 01-简介
02、基于 DirectX11 的 MMDViewer 02-创建一个窗口
03、基于 DirectX11 的 MMDViewer 03-渲染管线
04、基于 DirectX11 的 MMDViewer 04-渲染目标视口和多视口
源码下载(更随文章更新):https://github.com/forEmail/MMDViewer
基于 DirectX11 的 MMDViewer 01-简介的更多相关文章
- 基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口
上篇文章给出了一个简单并且可以运行的渲染框架,接下来将介绍框架中的渲染管线构成. 1.创建渲染管线 在你创建完一个窗口后,接着便要创建渲染管线,使用的函数是 D3D11CreateDeviceAndS ...
- 基于 DirectX11 的 MMDViewer 03-渲染管线
准备工作: 开始搭建框架之前,你需要确保已经进行了 D3D 开发环境的搭建,相关教程可以阅读这篇文章.不了解 DirectX11 的人,这个作者有关 DirectX11 的教程最好阅读一下,虽然文章不 ...
- 基于 DirectX11 的 MMDViewer 02-创建一个窗口
项目的创建和配置: 1.新建一个 Win32 空项目 2.创建源码文件夹.库文件夹和资源文件夹 3.在 VS2013(我使用的 IDE 是 vs2013)配置这些文件夹 这里使用了 $(Solutio ...
- Node.js 教程 01 - 简介、安装及配置
系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...
- 【转】【SSE】基于SSE指令集的程序设计简介
基于SSE指令集的程序设计简介 作者:Alex Farber 出处:http://www.codeproject.com/cpp/sseintro.asp SSE技术简介 Intel公司的单指令多数据 ...
- Lucene:基于Java的全文检索引擎简介
Lucene:基于Java的全文检索引擎简介 Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用J ...
- Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介
用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...
- Python基于回溯法解决01背包问题实例
Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...
- Linux 时间同步 01 简介
Linux 时间同步 01 简介 目录 Linux 时间同步 01 简介 时间同步 公共NTP服务器地址及IP 系统时间相关文件 时间同步 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同 ...
随机推荐
- 大规模向量相似度计算方法(Google在07年发表的文章)
转载请注明出处:http://www.cnblogs.com/zz-boy/p/3648878.html 更多精彩文章在:http://www.cnblogs.com/zz-boy/ 最近看了Goog ...
- JSP学习(三)JSP中的九个内置对象
JSP中的九个内置对象 NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.Htt ...
- Machine Schedule(二分图匹配之最小覆盖点,匈牙利算法)
个人心得:二分图啥的一点都不知道,上网借鉴了下,请参考http://blog.csdn.net/thundermrbird/article/details/52231639 加上自己的了解,二分图就是 ...
- JavaScript:基本包装类型
为了方便操作,JavaScript提供了3个特殊的引用类型:Boolean.Number和String.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用这些 ...
- 【最全 干货 实例】 缓存手册(Memcached、redis、RabbitMQ)
http://www.cnblogs.com/suoning/p/5807247.html 本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 re ...
- 7个GIF动图帮你瞬间理解三角函数
7个GIF动图帮你瞬间理解三角函数 蝌蚪五线谱 百家号04-2120:53 图片来源:IMGUR 三角函数是数学中研究三角形的一个分支,专门阐述三角形的角度和对应边的关系. 有趣的是,定义边角关系的三 ...
- cocos2d
http://www.jetbrains.com/webstorm/download/index.html 运行又有下面错误 Fatal signal 11 (SIGSEGV) at 0x000000 ...
- licode从客户端到连上信令服务器流程
var config = {audio: true, video: true, data: true, screen: screen, videoSize: [640, 480, 640, 480], ...
- Jenkins的构建
每个项目的详情页会显示下图内容 左侧操作项没有太多需要说明,Changes选项在Multibranch pipeline的时候,会显示从git上获取到的提交历史,普通的pipeline还没有尝试 下 ...
- JAVA多线程三种实现方式
JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...