这个项目主要是为了 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-简介的更多相关文章

  1. 基于 DirectX11 的 MMDViewer 04-渲染目标视图和多视口

    上篇文章给出了一个简单并且可以运行的渲染框架,接下来将介绍框架中的渲染管线构成. 1.创建渲染管线 在你创建完一个窗口后,接着便要创建渲染管线,使用的函数是 D3D11CreateDeviceAndS ...

  2. 基于 DirectX11 的 MMDViewer 03-渲染管线

    准备工作: 开始搭建框架之前,你需要确保已经进行了 D3D 开发环境的搭建,相关教程可以阅读这篇文章.不了解 DirectX11 的人,这个作者有关 DirectX11 的教程最好阅读一下,虽然文章不 ...

  3. 基于 DirectX11 的 MMDViewer 02-创建一个窗口

    项目的创建和配置: 1.新建一个 Win32 空项目 2.创建源码文件夹.库文件夹和资源文件夹 3.在 VS2013(我使用的 IDE 是 vs2013)配置这些文件夹 这里使用了 $(Solutio ...

  4. Node.js 教程 01 - 简介、安装及配置

    系列目录: Node.js 教程 01 - 简介.安装及配置 Node.js 教程 02 - 经典的Hello World Node.js 教程 03 - 创建HTTP服务器 Node.js 教程 0 ...

  5. 【转】【SSE】基于SSE指令集的程序设计简介

    基于SSE指令集的程序设计简介 作者:Alex Farber 出处:http://www.codeproject.com/cpp/sseintro.asp SSE技术简介 Intel公司的单指令多数据 ...

  6. Lucene:基于Java的全文检索引擎简介

    Lucene:基于Java的全文检索引擎简介 Lucene是一个基于Java的全文索引工具包. 基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用J ...

  7. Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介

    用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...

  8. Python基于回溯法解决01背包问题实例

    Python基于回溯法解决01背包问题实例 这篇文章主要介绍了Python基于回溯法解决01背包问题,结合实例形式分析了Python回溯法采用深度优先策略搜索解决01背包问题的相关操作技巧,需要的朋友 ...

  9. Linux 时间同步 01 简介

    Linux 时间同步 01 简介 目录 Linux 时间同步 01 简介 时间同步 公共NTP服务器地址及IP 系统时间相关文件 时间同步 大数据产生与处理系统是各种计算设备集群的,计算设备将统一.同 ...

随机推荐

  1. 大规模向量相似度计算方法(Google在07年发表的文章)

    转载请注明出处:http://www.cnblogs.com/zz-boy/p/3648878.html 更多精彩文章在:http://www.cnblogs.com/zz-boy/ 最近看了Goog ...

  2. JSP学习(三)JSP中的九个内置对象

    JSP中的九个内置对象 NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.Htt ...

  3. Machine Schedule(二分图匹配之最小覆盖点,匈牙利算法)

    个人心得:二分图啥的一点都不知道,上网借鉴了下,请参考http://blog.csdn.net/thundermrbird/article/details/52231639 加上自己的了解,二分图就是 ...

  4. JavaScript:基本包装类型

    为了方便操作,JavaScript提供了3个特殊的引用类型:Boolean.Number和String.实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而可以调用这些 ...

  5. 【最全 干货 实例】 缓存手册(Memcached、redis、RabbitMQ)

    http://www.cnblogs.com/suoning/p/5807247.html 本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 re ...

  6. 7个GIF动图帮你瞬间理解三角函数

    7个GIF动图帮你瞬间理解三角函数 蝌蚪五线谱 百家号04-2120:53 图片来源:IMGUR 三角函数是数学中研究三角形的一个分支,专门阐述三角形的角度和对应边的关系. 有趣的是,定义边角关系的三 ...

  7. cocos2d

    http://www.jetbrains.com/webstorm/download/index.html 运行又有下面错误 Fatal signal 11 (SIGSEGV) at 0x000000 ...

  8. licode从客户端到连上信令服务器流程

    var config = {audio: true, video: true, data: true, screen: screen, videoSize: [640, 480, 640, 480], ...

  9. Jenkins的构建

    每个项目的详情页会显示下图内容  左侧操作项没有太多需要说明,Changes选项在Multibranch pipeline的时候,会显示从git上获取到的提交历史,普通的pipeline还没有尝试 下 ...

  10. JAVA多线程三种实现方式

    JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...