DirectX11编程3 初次接触HLSL 渲染一个方块

环境:VS2017  语言:C++

 

总起:

红龙书所使用的Effect库已经不建议使用了,所以这边在编译Shader所使用的是X_Jun96大佬手动的方式。

 

附上工程链接:https://github.com/anguangzhihen/Dx11

 

红龙书本身是比较难以研读的,特别是对于初学者而言,它的一般做法是先将理论全部说一遍,然后讲一整个例子,没有由浅入深进行说明,总体而言看起来比较痛苦。不过我会把它读完。

 

红龙书第五章主要是渲染管线的理论知识,关于这个就不做详细叙述了,主要是两个阶段:

  1. 几何阶段,将模型内部坐标转换到齐次剪裁空间,主要通过wvp矩阵进行转换(Unity中为mvp);
  2. 光栅化阶段,通过遍历所有可见模型上的三角形,对其每个像素点进行操作(类似设置法线贴图就在该流程中)。

 

几何阶段对应的程序控制代码的Shader就是顶点着色器,即Vertex Shader(暂不讨论曲面细分着色器和几何着色器);而光栅化阶段是片元着色器,即Pixel Shader。

 

第六章是介绍Dx渲染时的各个函数与数据结构,然后是实践,看起来很多很复杂,实际上比起第四章使用的函数量少的多,所以我们直接从实践出发,看看渲染一个方块究竟要做一些什么操作。

 

渲染一个方块:

首先我们来看一下效果:

 

嗯,好的,非常完美(有同学可能要问:这不是棱锥吗?嗯……可能是方块上面的四个点坍缩成了一个点吧)。

 

首先我们让新建的BoxDemo类继承我们第一篇博文中编写的D3DApp,然后主要重写3个方法:Init、UpdateScene、DrawScene。

 

首先是Init,大部分的操作都集中在此处:

bool BoxApp::Init()
{
	if (!D3DApp::Init())
		return false;

	BuildGeometryBuffers();
	BuildFX();

	return true;
}

 

创建顶点和索引信息、设置GPU缓存(BuildGeometryBuffers)

在渲染一个模型的时候,我们考虑的第一步就是把这个模型通过顶点建立出来。

 

这边我们除了顶点以外,还需要设置索引信息,什么是索引信息呢。以2D空间举例:

一个方块顶点为:(0, 0) (0, 1) (1, 1) (1, 0)。

则以如果以三角形为图元,需要两个三角形才能渲染该方块,即:0 1 2和1 2 3。(Dx为左手坐标系,顶点顺序顺时针为可见)

 

上面的0 1 2 1 2 3便是索引信息,因为如果要使用顶点来表示索引,便会多出很多多余的内存。

 

首先声明3个缓存成员变量,还有常量缓存使用的数据结构:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值