Не могу как вращать, так и переводить мою сцену - direct3d

0

Я нарисовал куб на экране, и я хочу, чтобы и повернуть, и перевести сцену:

// Translation
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose( XMMatrixTranslation( placement->GetPosX(), placement->GetPosY(), placement->GetPosZ() ) ) );

// Rotation
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationX( placement->GetRotX() ) ) );
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationY( placement->GetRotY() ) ) );
XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(XMMatrixRotationZ( placement->GetRotZ() ) ) );

проблема в том, что работает только перевод... Должен ли я что-то задавать, прежде чем делать вращения.

  • Я использовал стандартный проект Windows 8 Phone Direct3D C++ в Visual Studio 2012 Windows Phone.
  • Я прошел еще несколько переменных и благодаря intellisense обнаружил, что существует функция matrixtransaltion
  • Я добавил свое позиционирование к этой матрице, а также подключил поворот к некоторым пользовательским переменным
  • Куб будет двигаться (переводить), но я предполагаю, что мне нужно каким-то образом сохранить это движение, а затем - поворот.

Что-нибудь, что я могу добавить к этому, чтобы помочь решить проблему?

Теги:
direct3d
c++-cx
windows-phone-8

1 ответ

1
Лучший ответ

Вы каждый раз переписываете содержимое m_constantBufferData.model. Вам нужно вызвать XMMatrixMultiply на четырех матрицах, чтобы объединить преобразования в одну матрицу, а затем сохранить окончательный результат. Например:

// Rotation
XMMATRIX m = XMMatrixRotationX( placement->GetRotX() );
m = XMMatrixMultiply(m, XMMatrixRotationY( placement->GetRotY() );
m = XMMatrixMultiply(m, XMMatrixRotationZ( placement->GetRotZ() );

// Translation
m = XMMatrixMultiply(m, XMMatrixTranslation( placement->GetPosX(), placement->GetPosY(), placement->GetPosZ() ) );

XMStoreFloat4x4( &m_constantBufferData.model, XMMatrixTranspose(m) );
  • 0
    Я так благодарен за это. Огромное спасибо. Работает отлично. Спасибо Спасибо спасибо. PS (ваша аватарка эпическая)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню