键盘控制摄像机位置改变
2010-07-01 15:24
176 查看
龙书的例程代码中真有许多值得我研究的地方。今天学习光照,自己动手写了一下那个有4个集合体的例子,我一开始用的是自动旋转的代码,突然想看看龙书的代码是怎么做的,于是看到了如下一段:
这一段通过键盘的上、下、左和右方向键控制摄像机的位置。首先定义了两个静态变量angle和height分别用来计算摄像机的位置。具体的位置计算公式是:D3DXVECTOR3 position(cosf(angle) * 7.0f, height, sinf(angle) * 7.0f);
也就是说,摄像机在xz平面上处在一个半径为7的圆上,x坐标为cos(angle),z坐标为sin(angle),而y坐标就是我们的高度,而高度控制则是通过上面的代码进行的,为了使运动平滑起来,我们使用了timeDelta作为移动的参数。
上述这段代码实现的移动效果非常好,摄像机始终定位在原点,看起来非常舒服!
static float angle = (3.0f * D3DX_PI) / 2.0f; static float height = 5.0f; if (::GetAsyncKeyState(VK_LEFT) & 0x8000f) { angle -= timeDelta * 0.5f; } if (::GetAsyncKeyState(VK_RIGHT) & 0x8000f) { angle += timeDelta * 0.5f; } if (::GetAsyncKeyState(VK_UP) & 0x8000f) { height += timeDelta * 5.0f; } if (::GetAsyncKeyState(VK_DOWN) & 0x8000f) { height -= timeDelta * 5.0f; } D3DXVECTOR3 position(cosf(angle) * 7.0f, height, sinf(angle) * 7.0f); D3DXVECTOR3 target(0, 0, 0); D3DXVECTOR3 worldup(0, 1, 0); D3DXMATRIX v; D3DXMatrixLookAtLH(&v, &position, &target, &worldup); device->SetTransform(D3DTS_VIEW, &v);
这一段通过键盘的上、下、左和右方向键控制摄像机的位置。首先定义了两个静态变量angle和height分别用来计算摄像机的位置。具体的位置计算公式是:D3DXVECTOR3 position(cosf(angle) * 7.0f, height, sinf(angle) * 7.0f);
也就是说,摄像机在xz平面上处在一个半径为7的圆上,x坐标为cos(angle),z坐标为sin(angle),而y坐标就是我们的高度,而高度控制则是通过上面的代码进行的,为了使运动平滑起来,我们使用了timeDelta作为移动的参数。
上述这段代码实现的移动效果非常好,摄像机始终定位在原点,看起来非常舒服!
相关文章推荐
- ios 含有textfield的viewcontroller随键盘弹起而改变位置
- jQuery控制div层,使其移动、改变位置
- 键盘管理-监听键盘事件及键盘出现或者隐藏时改变view的位置
- UIScrollView中UITextField文本编辑框位置随键盘的显示(隐藏)改变
- unity3d 摄像机跟随鼠标和键盘的控制
- Ogre场景、节点、摄像机通过自动、鼠标、键盘控制移动
- iOS UITextField位置随输入键盘动态改变 点击背景键盘消失
- oracle 11g改变控制文件的位置
- 物体运动--通过改变transform--键盘控制
- UItableview上自定义cell,带有textview,控制uitableview滚动到响应位置,不被键盘挡住
- 用键盘控制改变实体色彩
- Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
- MFC 对话框 拖动改变大小,控制位置(大小)跟随变化
- PELCO-D与PELCO-P协议介绍,三维控制键盘码表,安防,摄像机
- Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
- winform中,如何控制控件位置随窗体的大小改变而改变
- 键盘代理根据虚拟键盘弹出和收回控制UITextfield位置
- Android 软键盘弹出时布局位置改变
- jQuery控制div层,使其移动、改变位置
- 文本框随键盘动态改变位置(获取键盘弹起高度)