请教:一个游戏中旋转移动摄像机位置的问题

pdiy 2005-06-16 08:09:29
注:这个代码摘自([Introduction to 3D Game Programming with DirectX 9.0][EN])

这段代码的作用是改变摄像机的位置,但请问下面代码中的
这些
static float angle = (3.0f * D3DX_PI) / 2.0f; //这是什么意思?

D3DXVECTOR3 position( cosf(angle) * 3.0f, height, sinf(angle) * 3.0f ); //这个呢

对应的是什么公式?

bool Display(float timeDelta)
{
if( Device )
{
//
// Update the scene: update camera position.
//

static float angle = (3.0f * D3DX_PI) / 2.0f;
static float height = 2.0f;

if( ::GetAsyncKeyState(VK_LEFT) & 0x8000f )
angle -= 0.5f * timeDelta;

if( ::GetAsyncKeyState(VK_RIGHT) & 0x8000f )
angle += 0.5f * timeDelta;

D3DXVECTOR3 position( cosf(angle) * 3.0f, height, sinf(angle) * 3.0f );
D3DXVECTOR3 target(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;
D3DXMatrixLookAtLH(&V, &position, &target, &up);

Device->SetTransform(D3DTS_VIEW, &V);

//
// Draw the scene:
//

Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0);
Device->BeginScene();

Device->SetMaterial(&d3d::WHITE_MTRL);
Device->SetTexture(0, Tex);

Box->draw(0, 0, 0);

Device->EndScene();
Device->Present(0, 0, 0, 0);
}
return true;
}
...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MagicCarmack 2005-06-17
  • 打赏
  • 举报
回复
学习。。。。。。。。。。。。。
寻开心 2005-06-17
  • 打赏
  • 举报
回复
dxsdk当中的pick例子也是类似的方法,不过他是二维旋转(用两个角度控制),你给的例子是一维旋转(一个角度控制)
寻开心 2005-06-17
  • 打赏
  • 举报
回复
angle实际上就是圆心与相机位置与连线,和X轴所形成的角度
旋转的时候,固定相机的高度是height
寻开心 2005-06-17
  • 打赏
  • 举报
回复
static float angle = (3.0f * D3DX_PI) / 2.0f; //这是什么意思?
定义的是初始角度, 让相机从0, 0, -3 方向看向0 0 0 方向

D3DXVECTOR3 position( cosf(angle) * 3.0f, height, sinf(angle) * 3.0f ); //这个呢
定义相机的位置

整个算法是让相机围绕物体旋转,以从不同的角度来看这个物体
旋转的半径是3, 相机从 0, 0, -3位置开始在xoz平面进行旋转,
left和right键控制旋转的角度

你在xoz平面上画一个平面图就可以明白了
一个半径为3的圆,物体的圆心,相机围绕这个圆心旋转

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧