Помогите, замучился
От: tokaplan Россия  
Дата: 29.03.04 13:44
Оценка:
Модель поворачивается в трехмерном пространстве. Приращиваю угол поворота вокруг вертикальной оси — поворачивается правильно. Стоит модели "перекувырнуться" через себя — начинает поворачиваться в противоположном направлении. Почему? Это нормально, если придется ставить условие, в зависимости от которого надо будет приращивать угол или уменьшать?
Re: Помогите, замучился
От: Alxndr Германия http://www.google.com/profiles/alexander.poluektov#buzz
Дата: 29.03.04 13:50
Оценка:
Покажи код поворота.
Re: Помогите, замучился
От: Jenyay http://jenyay.net
Дата: 29.03.04 16:44
Оценка:
Здравствуйте, tokaplan, Вы писали:

T>Модель поворачивается в трехмерном пространстве. Приращиваю угол поворота вокруг вертикальной оси — поворачивается правильно. Стоит модели "перекувырнуться" через себя — начинает поворачиваться в противоположном направлении. Почему? Это нормально, если придется ставить условие, в зависимости от которого надо будет приращивать угол или уменьшать?


А ты вращаешь модель или камеру вокруг нее? У меня такое было, когда я вращал камеру из-за того, что, когда камера перейдет определенную границу, то ее верх оказывается снизу, а низ сверху.
... << RSDN@Home 1.1.3 stable >>
Софт, исходники и фото
Re[2]: Помогите, замучился
От: ChipsetX Россия http://merlinko.com
Дата: 29.03.04 18:04
Оценка:
Здравствуйте, Jenyay, Вы писали:

J>Здравствуйте, tokaplan, Вы писали:


T>>Модель поворачивается в трехмерном пространстве. Приращиваю угол поворота вокруг вертикальной оси — поворачивается правильно. Стоит модели "перекувырнуться" через себя — начинает поворачиваться в противоположном направлении. Почему? Это нормально, если придется ставить условие, в зависимости от которого надо будет приращивать угол или уменьшать?


J>А ты вращаешь модель или камеру вокруг нее? У меня такое было, когда я вращал камеру из-за того, что, когда камера перейдет определенную границу, то ее верх оказывается снизу, а низ сверху.


Код покажи мы разберёмся
"Всё что не убивает нас, делает нас сильнее..."
Re[3]: Помогите, замучился
От: tokaplan Россия  
Дата: 29.03.04 19:06
Оценка:
CX>Код покажи мы разберёмся

Да собственно и показывать нечего. В D3DXVECTOR3 AnglesDir[0] храню углы поворота вокруг осей, при движении мыши приращиваю их. А дальше — стандартная операция, по-моему, из MSDN скопировал ( стиль комментариев ихний )...

D3DXMATRIX matTrans;
D3DXMatrixIdentity( &matTrans );
D3DXMATRIX MatTemp; // Temp matrix for rotations.
D3DXMATRIX MatRot; // Final rotation matrix, applied to
// pMatWorld.

// Using the left-to-right order of matrix concatenation,
// apply the translation to the object's world position
// before applying the rotations.
D3DXMATRIX *pMatWorld = new D3DXMATRIX;
D3DXMatrixIdentity(&MatRot);
D3DXMatrixIdentity(pMatWorld);

// Now, apply the orientation variables to the world matrix
if(AnglesDir[0].x || AnglesDir[0].y|| AnglesDir[0].z) {
// Produce and combine the rotation matrices.
D3DXMatrixRotationX(&MatTemp, ( D3DX_PI/180 )*(AnglesDir[0].x)); // Pitch
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationY(&MatTemp, ( D3DX_PI/180 )*(AnglesDir[0].y)); // Yaw
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);
D3DXMatrixRotationZ(&MatTemp, ( D3DX_PI/180 )*(AnglesDir[0].z)); // Roll
D3DXMatrixMultiply(&MatRot, &MatRot, &MatTemp);

// Apply the rotation matrices to complete the world matrix.
D3DXMatrixMultiply(pMatWorld, &MatRot, pMatWorld);
}

//Move ourselves
D3DXMatrixTranslation( &matTrans, Point.x, Point.y, Point.z );
D3DXMatrixMultiply( pMatWorld, pMatWorld, &matTrans );
m_pd3dDevice->SetTransform( D3DTS_WORLD, pMatWorld);
Re[4]: Помогите, замучился
От: Larm Украина  
Дата: 30.03.04 08:45
Оценка:
Здравствуйте, tokaplan, Вы писали:


T> m_pd3dDevice->SetTransform( D3DTS_WORLD, pMatWorld);


Ничего удивительного — ты поворачиваешь не объект, а мир вокруг него. А объект как был неповернутым, так и остался.. Наблюдаемыей эффект естественен — добавь еще один объект для ясности . Попробую матрицу модели менять. Должно помочь.
The God who walks is among us...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.