我想使用矩阵堆栈来跟踪分层模型中的变换。唯一令人遗憾的是,似乎没有我可以用来执行此操作的内置矩阵堆栈类。Direct3D 模板只是跟踪模型、视图和投影矩阵,然后将它们传递给顶点着色器。
渲染器制作常量缓冲区:
CD3D11_BUFFER_DESC constantBufferDesc(sizeof(ModelViewProjectionConstantBuffer), D3D11_BIND_CONSTANT_BUFFER);
DX::ThrowIfFailed(
m_d3dDevice->CreateBuffer(
&constantBufferDesc,
nullptr,
&m_constantBuffer)
);
顶点着色器变换每个顶点:
cbuffer ModelViewProjectionConstantBuffer : register(b0)
{
matrix model;
matrix view;
matrix projection;
};
...
// Transform the vertex position into projected space.
pos = mul(pos, model);
pos = mul(pos, view);
pos = mul(pos, projection);
output.pos = pos;
...
我花了一些时间寻找一个内置的矩阵堆栈类,这样我就不必重新发明轮子,但我得到的唯一有希望的领先优势ID3DXMatrixStack似乎无法在 WP8 Direct3D 应用程序中访问。
所以我错过了什么还是我需要自己写?