这个项目主要是为了 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. ios逆向工程-内部钩子(Method Swizzling)

    Method Swizzling(方法调配) 怎么说呢,先了解什么是钩子为什么用钩子,学过C++的朋友应该清楚,hook就是用来获得(截断/改变)底层调用的方法.这样我们可以自由的修改或者读取一些想要 ...

  2. hiho 1515 : 分数调查 简单bfs

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi的学校总共有N名学生,编号1-N.学校刚刚进行了一场全校的古诗文水平测验. 学校没有公布测验的成绩,所以小Hi只能得 ...

  3. BZOJ1015: [JSOI2008]星球大战starwar【并查集】【傻逼题】

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

  4. BZOJ3786 星系探索 【Splay维护dfs序】*

    BZOJ3786 星系探索 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均 ...

  5. 使 32 位程序使用大于 2GB 的内存

    不管在 32 位 Windows 上还是在 64 位 Windows 上,32 位的应用程序都只能使用最大 2GB 的内存,这是我们司空见惯的一个设定.但其实 Windows 提供了一些方法让我们打破 ...

  6. php7+Redis+Windows7安装 (phpstudy)

    1.首先去github网站上下载https://github.com/dmajkic/redis/downloads: 2.根据实际情况,将64bit的内容cp到自定义盘符目录,如D:\Redis; ...

  7. 在 ubuntu 中安装 python3.5 tornado pymysql

    一.在 ubuntu 中安装 python3.5 1.首先,在系统中是自带python2.7的.不要卸载,因为一些系统的东西是需要这个的.python2.7和python3.5是可以共存的. 命令如下 ...

  8. 《DSP using MATLAB》示例Example 6.10

    上代码: % Pole-Zero IIR filter to Lattice-ladder structure filter b = [1, 2, 2, 1]; a = [1, 13/24, 5/8, ...

  9. linux 系统下配置tomcat,并给tomcat赋予最高操作权限,启动tomcat和关闭tomcat

    配置tomcat服器 sudo chmod -R 777 * 给某个文件下所有文件赋予最高的读写权限 红颜色的字是路径,蓝颜色字是命令 (1)官方网站下载tomcat压缩包.apache-tomcat ...

  10. 使用neon 开发nodejs addon

    备注:开发使用的是mac 系统,需要安装rust nodejs .python2.7 Xcode 1. 安装neon npm install -g neon-cli   2. 创建简单项目 neon ...