【问题标题】:c++ DirectX 11 - 3rd person camerac++ DirectX 11 - 第三人称相机
【发布时间】:2013-12-30 01:38:57
【问题描述】:

我正在尝试设置第三人称相机,但我迷失了旋转。我的旋转适用于 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 才能看到一些东西。为什么?

【问题讨论】:

    标签: c++ camera directx


    【解决方案1】:

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

    围绕 X 轴旋转 theta(弧度)

    绕Y轴旋转θ(弧度)

    围绕 Z 轴旋转 theta(弧度)

    【讨论】:

      【解决方案2】:

      想象现实世界。

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

      这是不可能的。

      【讨论】:

      • 是的,当我遇到异常时我意识到了这一点,因为lookAt 和 position 是相等的。但是当我的 z 等于 10 而没有其他东西时,我什么也看不到。我有一些新的东西,如果我的向上向量是 y,我的相机位置不能让 x 和 z 等于零。如果我的上向量是 z 等于 1.0f,那么我必须有另一个不等于 0.0f 的 z 变量。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2015-10-07
      • 2013-04-01
      • 1970-01-01
      相关资源
      最近更新 更多