DX12学习笔记(龙书)(小点8:顶点-数据的处理)

顶点结构体,/一个顶点有哪些数据?

struct Vertex1
{
XMFLOAT3 pos; 偏移量0
XMFLOAT4 color; 偏移量12
}

顶点结构体描述,/这些数据是怎么辨认的?

D3D12_INPUT_LAYOUT_DESC,需要两个内容,1个是依次描绘了顶点结构体中对应的成员的元素的数组(一个INPUT_ELEMENT_DESC数组),一个是表示该数组中元素数量的整数。

D3D12_INPUT_ELEMENT_DESC v[] =
{{“POSITION”,//与顶点着色器中输入签名即VS函数的参数链接起来。
0,//
DXGI_FORMAT_R32G32B32_FLOAT,//顶点元素的格式
0,//*指定传递元素所用的输入槽(input slot index)索引。*暂时只用到0
0,//从结构体的首地址到其中某点元素起始地址的偏移量。字节表示
D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA,//不是实例化的话,就是这个了
0}//实例化是会变化},
{如上}
}

创建缓冲区,/顶点数组是放到在里的?

创建一个ID3D12Resource,储存这些数据。
DX12这本书给我们做了一个辅助函数。CreateDefaultBuffer
(
md3dDevice.Get(),
mCommandList.Get(),
vertices,
vbBypeSize,(顶点数*sizeof(Vertex))
VertexBufferUploader//重要重要。是一个上传堆。
)

其中的这个uploader是我们一开始创建的一个ID3D12Resource,到时候会派上用场。

把顶点缓冲区绑定到渲染流水线上靠视图,/在渲染之前要做什么?

typedef struct D3D12_VERTEX_BUFFER_VIEW
{
bufferLocation;资源的虚拟地址。可以用Re::GetCPUVirtualAddress
SizeInBytes;顶点缓冲区的大小
StrideInBytes;每个顶点所占字节数
}

在顶点缓冲区及其视图创建完成之后,我们可以把它与渲染流水线上的一个输入槽相绑定。
这样一来,我们就能够向流水线中的输入装配器阶段(IA阶段。第一个阶段)传递顶点数据了。

void ID3D12GraphicsCommandList::IASetVertexBuffers
(
StartSlot,//输入槽,定义INPUT_ELEMENT_DESC时提到过。
NumView,/将要与输入槽绑定的顶点缓冲区数量。pView中视图的数量。如果起始输入槽StartSlot的索引值是k,且我们要绑定n个顶点缓冲区,那么这些缓冲区将依次与输入槽Ik,Ik+1,Ik+2相绑定。
pViews 指向顶点缓冲区视图数组中第一个元素的指针。
)
这个
pview里面,可以存不少视图噢。*pview可以指向一个D3D12_VERTEX_BUFFER_VIEW数组。

画画了画画了

从之前开始,我们的缓冲区已经绑定了,视图也是。所以我们已经获得了用来画画的那个数据。接下来只是画而已了吧。这个数据在缓冲区里以某种方式存在,现在就是揭示它们的时候了!(找到它们的位置。)
void ID3D12GraphicsCommandList::DrawInstanced(
UINT VertexCountPerInstance,每个实例要绘制的顶点数量
UINT InstanceCount,//实例化的高级技术有关,暂略
UINT StartVertexLocation,//顶点缓冲区内第一个被绘制顶点的索引。以0为基准
UINT StartInstanceLocation//暂时只需要设置为0,是实例化技术。
)
这一次真正绘制的内容是【缓冲区的起始位置+StartVertexLocation】到【缓冲区的起始位置+StartVertexLocation+VertexCountPerInstance】这部分内容。

唉??那么这些内容要被画成什么样子呢!?

我们只定义了它数据如何被提取。
至于顶点要画成什么样子……
必须在画画之前调用
cmdList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRANIANGLELIST);来规定一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值