我在DirectX11中创建了一个三角形。我现在想要使用视口和世界矩阵来帮助我理解它们,所以我想简单地围绕Z轴旋转三角形。我尝试这样做的代码如下。
void Render(void)
{
if (d3dContext_ == 0)
return;
XMMATRIX view = XMMatrixIdentity();
XMMATRIX projection = XMMatrixOrthographicOffCenterLH(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f); .
XMMATRIX vpMatrix_ = XMMatrixMultiply(view, projection);
XMMATRIX translation = XMMatrixTranslation(0.0f, 0.0f, 0.0f);
XMMATRIX rotationZ = XMMatrixRotationZ(30.0f);
XMMATRIX TriangleWorld = translation * rotationZ;
XMMATRIX mvp = TriangleWorld*vpMatrix_;
mvp = XMMatrixTranspose(mvp);
float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };
d3dContext_->ClearRenderTargetView(backBufferTarget_, clearColor);
unsigned int stride = sizeof(VertexPos);
unsigned int offset = 0;
d3dContext_->IASetInputLayout(inputLayout_);
d3dContext_->IASetVertexBuffers(0, 1, &vertexBuffer_, &stride, &offset);
d3dContext_->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
d3dContext_->VSSetShader(solidColorVS_, 0, 0);
d3dContext_->PSSetShader(solidColorPS_, 0, 0);
d3dContext_->UpdateSubresource(mvpCB_, 0, 0, &mvp, 0, 0);
d3dContext_->VSSetConstantBuffers(0, 1, &mvpCB_);
d3dContext_->Draw(3, 0);
swapChain_->Present(0, 0);
}
它只显示标准三角形,就好像它没有注意到mvp一样。
我期望的效果是由XMMATRIX rotationZ = XMMatrixRotationZ(30);
控制的旋转。
由于
答案 0 :(得分:2)
XMMatrixRotationZ
将弧度作为参数,而不是度数(请参阅MSDN Description)。
要从弧度获得度数,您必须乘以M_PI / 180.0f
XMMATRIX rotationZ = XMMatrixRotationZ(30 * M_PI / 180.0);
答案 1 :(得分:1)
据我所知,从OpenGl中你必须为每个刻度点稍微增加一个动画旋转的XMMatrixRotationZ值,否则你只能在特定角度绘制一次。
所以(如果你还没有)为你的渲染函数创建一个循环并增加每轮的角度值
希望我能提供帮助