为什么我的三角形拒绝旋转?

时间:2013-11-29 09:52:52

标签: directx direct3d directx-11

我在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);控制的旋转。

由于

2 个答案:

答案 0 :(得分:2)

XMMatrixRotationZ将弧度作为参数,而不是度数(请参阅MSDN Description)。 要从弧度获得度数,您必须乘以M_PI / 180.0f

XMMATRIX rotationZ = XMMatrixRotationZ(30 * M_PI / 180.0);

答案 1 :(得分:1)

据我所知,从OpenGl中你必须为每个刻度点稍微增加一个动画旋转的XMMatrixRotationZ值,否则你只能在特定角度绘制一次。

所以(如果你还没有)为你的渲染函数创建一个循环并增加每轮的角度值

希望我能提供帮助