c ++ DirectX 11 - 第三人称相机

时间:2013-12-30 01:38:57

标签: c++ camera directx

我正在尝试设置第三人称相机,但我已经失去了旋转。我的旋转正在为Y轴工作,但其他人正在奇怪地移动。这是我的代码:

XMMATRIX Camera2::Render()
{
    return XMMatrixLookAtLH( XMLoadFloat3( &m_vPosition ), XMLoadFloat3( &m_vTargetPos     ), XMLoadFloat3( &( XMFLOAT3( 0.0f, 1.0f, 0.0f ) ) ) );
}

void Camera2::Rotate( float fAngle, int nAxe )
{
    float fToRad = 0.0174532925f;
    fAngle *= fToRad;

    if( nAxe == 0 )
    {
        XMFLOAT3 vPosition = m_vPosition;
        m_vPosition.y = vPosition.y * cos( fAngle ) - vPosition.z * sin( fAngle );
        m_vPosition.z = vPosition.y * sin( fAngle ) + vPosition.z * cos( fAngle );
    }
    else if( nAxe == 1 )
    {
        XMFLOAT3 vPosition = m_vPosition;
        m_vPosition.z = vPosition.z * cos( fAngle ) - vPosition.x * sin( fAngle );
        m_vPosition.x = vPosition.z * sin( fAngle ) + vPosition.x * cos( fAngle );
    }
    else if( nAxe == 2 )
    {
    XMFLOAT3 vPosition = m_vPosition;
    m_vPosition.x = vPosition.x * cos( fAngle ) - vPosition.y * sin( fAngle );
    m_vPosition.y = vPosition.x * sin( fAngle ) + vPosition.y * cos( fAngle );
    }
}

调用相机的代码功能(x = 0,y = 1,z = 2):

if( event.IsPushedKey( VK_F1 ) )
    m_pCamera->Rotate( -3.0f, 0 );
else if( event.IsPushedKey( VK_F2 ) )
    m_pCamera->Rotate( -3.0f, 1 );
else if( event.IsPushedKey( VK_F3 ) )
    m_pCamera->Rotate( -3.0f, 2 );
else if( event.IsPushedKey( VK_F4 ) )
    m_pCamera->Rotate( 3.0f, 0 );
else if( event.IsPushedKey( VK_F5 ) )
    m_pCamera->Rotate( 3.0f, 1 );
else if( event.IsPushedKey( VK_F6 ) )
    m_pCamera->Rotate( 3.0f, 2 );

另一个问题:当我从XMFLOAT3(0.0f,0.0f,0.0f)开始作为lookAt变量并且x和y位置等于0时,没有任何东西被绘制。我需要将lookAt的一个设置为1.0f以查看某些内容。为什么呢?

2 个答案:

答案 0 :(得分:0)

想象现实世界。

当你试图专注于自己的眼睛时会发生什么?

这是不可能的。

答案 1 :(得分:0)

旋转矩阵绕Y轴和Z轴旋转是错误的,这里是矩阵。

围绕X轴旋转θ(弧度)

enter image description here

围绕Y轴旋转θ(弧度)

enter image description here

围绕Z轴旋转θ(弧度)

enter image description here