一个非飞行类游戏的Camera类
来源:互联网 发布:物业管理源码 编辑:程序博客网 时间:2024/06/05 00:33
一般游戏都有一个对摄像机进行移动控制的方法,大型的3D游戏更是如此,但我看了NEHE和一些其他的场景漫游方法,都是通过旋转或移动整个场景,这样的话必然使物体在世界坐标系中的坐标发生变化,虽然在效果上来讲没什么影响,但总体给我感觉是控制不太灵活——摄像机总在某一点而只有场景的物体转动。
基于这些,我自己去写了个算摄像机位置的camera类,虽然有点属于舍近求远的做法,但控制摄像机的位置和朝向比较符合我心意……
嗯,然后说下算法思路。
虽然没打算做飞行游戏的camera类,但还是要引入飞机的3个方向角度来说明算法,因为没做适合飞行的,所以并没有引入滚转角(roll angle),而是只使用了偏航角(yaw angle)和俯仰角(pitch angle )。
当然,既然引入了个各种角度,那就肯定离不开各种有关三角函数的计算……我们先抛开X,Y,Z各个轴的限定,看下图:
设原点坐标为(0,0,0),要求线段L的另一个端点的坐标,假设其中一个坐标分量为C轴坐标C1,如果我们知道了L的长度和alpha还有beta角的值,C1就可以算出来:俯仰角为beta,L确定后beta值在同高度上都相等,黑色虚线为L的投影,则黑色虚线的长度L1=L×cos(beta)。
黑色虚线端点的C坐标肯定和L相等,红色虚线垂直下来的C坐标即为C1,则C1=L1×cos(alpha),整理上面的公式,得:C1 = L×cos(alpha)×cos(beta)。
由以上的思路,当我们知道具体的移动距离和X,Y,Z朝向时,就可以把X和Z的坐标求出来。
Y轴的坐标因为beta值在同高度上始终不变,所以Y=L×sin(beta)。
算法大概思路就是以上了,当然代码会复杂一点,因为控制镜头转向和摄像机移动都不是单纯的按照上面的公式,但因为都是基于此思路的,所以能了解此方法的话理解代码应该不成问题。
源码下载:
http://download.csdn.net/source/2616772
- 一个非飞行类游戏的Camera类
- 自己早期做的一个基于j2me的飞行射击类游戏
- 飞行射击类游戏,Helloworldgame
- 非常经典的飞行射击类游戏飞离神庙源码
- 非常经典的飞行射击类游戏飞离神庙源码
- J2ME飞行射击类游戏一
- Android游戏开发之飞行射击类游戏原理
- 设计一个灵活的Camera类
- 个人封装的一个Camera类
- 一个简单的camera管理类
- Unity3d触摸屏控制2D飞行射击类游戏角色
- 一个最最简单的飞行射击游戏(J2ME)的大体框架介绍
- java学习做的一个简单的骑士飞行棋游戏!
- C#学习编写的飞行棋游戏
- Android游戏开发之飞行射击类游戏原理实现(二十)
- (转)Android游戏开发之飞行射击类游戏原理实现(二十)
- 一个精致的camera类,我喜欢它。
- Game视图中实现类Scene中Camera的控制(非自身中心)
- 在Coolite中动态添加有图标的Tab
- oracle中利用游标更新表中的记录集
- 在ASP.NET中自动合并小图片并使用CSS Sprite显示出来
- 使用eclipse+gdb进行arm板嵌入式linux远程调试的配置方法
- linux poll操作
- 一个非飞行类游戏的Camera类
- POJ 1088 比较有意思的动态规划
- linux进程控制编程与守护进程编写实例
- js 合并单元格
- Oracle中ROWID详解
- C与C++的区别
- 近来看看
- Android 手机之:Huawei_C8600
- MTK MMI event 小结 9