|
大家看看,为什么我这已运行就有很大的问题,我还想知道,到底初始时,局部坐标系,世界坐标系,观察坐标系,他们的方向朝向是怎样,是不是完全相同,还有 D3DXMatrixLookAtLH的第二个参数到底是以世界坐标系为基准,还是以观察坐标系为基准?还有对一个变换实行多个变换怎样实现,比如我们把一个物体的局部坐标系变换到世界坐标系中,既要实行平移变换,又要实行旋转变换,甚至放缩变换,怎样实现,是不是相乘,如果是相乘,那么他们的乘的次序对变换结果有没有影响,如果有影响,那么分别又有什么区别,望高手们能给我详细解答,越详细越好,不胜感激!!!
#include "CARMER.h"
CARMER::CARMER(void)
{
m_xRoto=0;
m_yRoto=0;
m_zRoto=0;
m_xoffset=0;
m_yoffset=0;
m_zoffset=0;
nbase=0.1f;
posX=D3DXVECTOR3(1.0f,0.0f,0.0f);
posY=D3DXVECTOR3(0.0f,1.0f,0.0f);
posZ=D3DXVECTOR3(0.0f,0.0f,1.0f);
}
CARMER::~CARMER(void)
{
}
void CARMER::SetTransform(IDirect3DDevice9* device)
{
if(GetAsyncKeyState('W')&0x8000f)
{
m_xoffset+=posZ.x;
m_yoffset+=posZ.y;
m_zoffset+=posZ.z;
D3DXMATRIX T,R1,R2,G;
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState('D')&0x8000f)
{
m_xoffset+=posX.x;
m_yoffset+=posX.y;
m_zoffset+=posX.z;
D3DXMATRIX T,R1,R2,G;
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState(VK_UP)&0x8000f)
{
m_xRoto+=nbase;
D3DXMATRIX T,R1,R2,Q,G;
D3DXMatrixRotationAxis(&Q,&posX,nbase);
D3DXVec3TransformNormal(&posZ,&posZ,&Q);
D3DXVec3Normalize(&posZ,&posZ);
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
if(GetAsyncKeyState(VK_LEFT))
{
m_zRoto+=nbase;
D3DXMATRIX T,R1,R2,Q,G;
D3DXMatrixRotationAxis(&Q,&posY,nbase);
D3DXVec3TransformNormal(&posX,&posX,&Q);
D3DXVec3Normalize(&posX,&posX);
D3DXVec3TransformNormal(&posZ,&posZ,&Q);
D3DXVec3Normalize(&posZ,&posZ);
D3DXMatrixTranslation(&T,m_xoffset,m_yoffset,m_zoffset);
D3DXMatrixRotationAxis(&R1,&posY,m_yRoto);
D3DXMatrixRotationAxis(&R2,&posX,m_xRoto);
G=(T*R2)*R1;
device->SetTransform(D3DTS_VIEW,&G);
}
由于字数有限,所以之给出上,右,仰视,和右转,其它的是一样的,只是符号有点不同。 [em1] |
|