OpenGL实现CS死后的摄像机漫游方式

这里着重介绍对WASD键的响应动作。

因为这个比较简单,呵呵。

对视图矩阵中的 m[3][0] 进行加加减减就可以完成对AD键对应的动作。

对视图矩阵中的 m[3][2] 进行加加减减就可以完成对WS键对应的动作。


简单的写两句代码:

	// get the modelview matrix
	float mat[4][4];
	glGetFloatv(GL_MODELVIEW_MATRIX, (float*)mat);
	if(KeyDown('W')){
		mat[3][2] += speed;
	}
	...
	glLoadMatrixf((float*)mat);

原理:

模型视图矩阵:由模型矩阵和视图矩阵的乘积得到的。

对于一个3D坐标的变换在数学上可以认为是先乘模型矩阵再乘视图矩阵:(Mmv = Mm * Mv)

然而对于视图矩阵又可以理解为先进行一次仿射变换再进行一次平移变换,

           Mv11  Mv11  Mv11  0     1  0  0  0

Mv =  Mv21  Mv11  Mv11  0  *  0  1  0  0

          Mv31  Mv11  Mv11  0     0  0  1  0

          0        0         0         1      x   y   z  1

在opengl中摄像机是被固定在世界坐标的原点上的,朝向z的负半轴。

在逻辑上对摄像机的移动其实是对世界的移动来完成的。

通过以上分析得出,对世界移动的最后一步是一次平移,

是不是很简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值