|
发表于 2007-11-4 18:12:00
|
显示全部楼层
Re:设置相机绕某点旋转时遇到的问题
我做的DEMO中的部分代码,摄像头始终对着一个模型看,那模型移动的时候就跟着动
其中
m_ORobot0是模型的类,GetXPos就是获取这个模型在X轴上的值
m_Camera是一个摄像头类,Point函数就是使得摄像头由一个点往另外一个点望过去的效果
也许对楼主有点用
HRESULT cApp::Frame()
{
static DWORD StartTime = timeGetTime();
DWORD Time = timeGetTime() - StartTime;
str = new char[1000];
::sprintf(str,"XRotate = %f YRotate = %f ZRotate = %f",m_ORobot0.GetXRotation(),m_ORobot0.GetYRotation(),m_ORobot0.GetZRotation());
//响应输入设备
DoInput();
float rY = m_ORobot0.GetYRotation();
float lenght = sqrt((m_ORobot0.GetXPos()*m_ORobot0.GetXPos()+m_ORobot0.GetZPos()*m_ORobot0.GetZPos()));
m_Camera.Update();
m_Graphics.SetCamera(&m_Camera);
m_Camera.Point(m_ORobot0.GetXPos()-50*cos(-rY),m_ORobot0.GetYPos()+10,m_ORobot0.GetZPos()-50*sin(-rY),m_ORobot0.GetXPos(),m_ORobot0.GetYPos(),m_ORobot0.GetZPos());
//渲染桢
RenderFrame();
return S_OK;
}
HRESULT cApp: oInput()
{
//获取输入设备信息
m_Keyboard.Acquire(TRUE);
m_Keyboard.Read();
m_Mouse.Acquire(TRUE);
m_Mouse.Read();
float rY = m_ORobot0.GetYRotation();
if(m_Keyboard.GetKeyState(DIK_W))
{
m_ORobot0.MoveRel(cos(-rY),0,sin(-rY));
}
if(m_Keyboard.GetPureKeyState(DIK_S))
{
m_ORobot0.MoveRel(-cos(-rY),0,-sin(-rY));
}
if(m_Keyboard.GetPureKeyState(DIK_A))
{
m_ORobot0.RotateRel(0,-0.05f,0);
}
else if(m_Keyboard.GetPureKeyState(DIK_D ))
{
m_ORobot0.RotateRel(0,0.05f,0);
}
if(m_Keyboard.GetPureKeyState(DIK_SPACE))
{
jump = true;
}
return S_OK;
} |
|