教程地址
Tutorial 7: 3D Model Rendering
学习记录
渲染 3D 图形的话和 2D 视角不同,我们必须使用 3D 摄像机视角,如果对摄像机以及矩阵作用不太懂的话可以看这里:【OpenGL】10-摄像机 。
首先我们先渲染出来一个三角形,修改顶点以及使用索引绘制:
1 | struct Vertex |
然后修改消息循环里的绘制方法为:pImmediateContext->DrawIndexed(36, 0 , 0);
。
现在创建我们的 world
view
projection
三个矩阵,首先定义结构体:
1 | struct Constant { |
我们使用 DX 中提供的几个方法来创建这个三个矩阵:
1 | Constant cb = { |
这里我直接将这些放在了一块创建了结构体,分开写是这样:
1 | Constant cb; |
(是不是和 opengl 很像)
之后,我们创建 Constant 的缓冲对象并且创建好缓冲:
1 | D3D11_BUFFER_DESC constantBufferDesc; |
设置设备上下文:
1 | pImmediateContext->VSSetConstantBuffers(0, 1, &pConstantBuffer); |
在 DX 代码里需要修改的内容差不多就这些了,接下来看看 HLSL 代码,在顶点着色器里我们需要对 POSITION 来乘这三个矩阵,首先定义一个全局变量:
1 | cbuffer ConstantBuffer : register(b0) { |
在 main 函数里相乘:
1 | pixelInputType main( vertexInputType input ) |
接下来运行程序,应该可以看到这个:
源代码在这里:DX11Tutorial-3DRender