博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Away3D引擎学习笔记(二)CameraController相机控制的应用
阅读量:6902 次
发布时间:2019-06-27

本文共 2997 字,大约阅读时间需要 9 分钟。

cameraController---相机控制器

这里针对Away3D里面封装的CameraController的区别和使用做些简单介绍。相机控制器的设计思路比较清晰,所以难点东西不多。使用方面附上源码以供参考

一、概念

    其实没什么概念好讲。相机控制器:是指通过一定规范、更直观的方法和属性标注,提供对相机的坐标、角度的控制。因此也就提出了一点,如果默认提供的下述几个CameraController不满足使用,那么自行扩展,添加限制属性,不会很复杂。

二、Away3D中的CameraController介绍

  继承自ControllerBase的具体实现的相机控制器有5个,实际使用最多的包括FirstPersonController, hoverController, FollowController等。其关系图如下:

三、分类介绍

1、FirstPersonController第一人称视角。

  特点:根据当前观察角度提供前后左右移动的控制,可以修改相机Pan(水平旋转角度),Tilt(俯仰角度)等。

  应用场景:CS游戏里面的那种控制方式(IT人生应该都了解)

     提供属性:

    incrementWalk 来调整前后

    incrementStrafe调整左右

     fly  标记是否飞行。即修改竖直方向的偏移(y轴)

          使用关键代码如下:

var myCamera:Camera3D = new Camera3D(); _view3D.camera = myCamera;_cameraController =  new FirstPersonController(myCamera);_cameraController.minTiltAngle = 0;_cameraController.maxTiltAngle = 90;myCamera.lookAt(new Vector3D(0,-0,0))this.addEventListener(Event.ADDED_TO_STAGE, addedHandler);使用键盘操纵移动,在这个过程中相机角度平行变化,另外tiltAngle设置角度为0的时候视角刚好平观察对象点this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);private function keyUpHandler(event:KeyboardEvent):void{    if(event.keyCode == 38)    {        _cameraController.incrementWalk(10)    }    else if(event.keyCode == 40)    {        _cameraController.incrementWalk(-10);    }    else if(event.keyCode == 39)    {        _cameraController.incrementStrafe(10);    }    else if(event.keyCode == 37)    {        _cameraController.incrementStrafe(-10);    }    }

2、HoverController 观察视角

  特点: 提供针对观察点,或者观察物体的全方位观察,限制相机距离不会透视过观察点(或观察物体)

  应用: 街景。设置当前中心的观察点,提供一个可以旋转俯仰去观察四周景色的场景控制

      提供属性:

           distance: 设置相机距离观察点(观察物)的距离,>0 则可以避免透过物体

           lookAtPosition(LookAtObject): 观察点,场景观察中心点。

    示例代码如下:

_cameraController = new HoverController(myCamera);_cameraController.distance = 1000;_cameraController.minTiltAngle = 0;_cameraController.maxTiltAngle = 90;_cameraController.tiltAngle = 20;_cameraController.lookAtPosition = new Vector3D(200, 200, 0);private function addedHandler(event:Event):void{	this.stage.addEventListener(MouseEvent.MOUSE_MOVE, moveHandler);	this.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);}//工作鼠标移动修改相机观察角度private function moveHandler(event:MouseEvent): void{	_cameraController.panAngle = (this.mouseX * 2/ 300) * 60;	_cameraController.tiltAngle = (this.mouseY * 2/ this.height - 1) * 45 + 45;}//修改观察距离private function wheelHandler(event:MouseEvent):void{	if(event.delta > 0 && _cameraController.distance > 120)	{		_cameraController.distance -= 100;	}	else	{		_cameraController.distance += 100;	}}

3、FollowController   跟随视角

      特点: 视角跟随观察物发生变化,可以控制观察距离,旋转角度通过绑定观察物来控制,观察物旋转发生变化则变化,确保观察位于对屏幕中心,角度竖直垂直于屏幕。

      直接修改相机的旋转角度会在下次物体变化时被覆盖。

      应用: 大场景3D游戏,人物走动跑动是周边景色随之后退。 赛车类游戏场景刷新等

      属性:   

            lookAtObject: 视角跟随物,即游戏场景中的人,赛车游戏中的车等

    distance: 控制观察距离,类似游戏场景中的远景和近景区别

           其他的,坐标同步跟随物的坐标,角度同步LookAtObject的角度

      示例代码:  这里就不贴代码了,修改lookAtObject的x,y,z,rotateY,rotateX等

 

总结: 没什么好总结的,区别很明确,大家可以根据具体情况使用。附录中提供了firstController和FollowController的比较好的使用源码,供大家参考。  其中FollowDemo中的左右键控制属性和标准赛车游戏中的不同,因为赛车游戏是用左右控制方向的,本人用的是鼠标。思路告诉大家,自行修改了.

源码链接:

转载于:https://www.cnblogs.com/xignzou/p/3164180.html

你可能感兴趣的文章
CUDA2.2-原理之存储器访问
查看>>
IDA 在string窗口中显示中文字符串
查看>>
Linux下服务器端开发流程及相关工具介绍(C++)
查看>>
matplotlib绑定到PyQt5(无菜单)
查看>>
深入理解Javascript闭包概念
查看>>
Selenium--cssselector
查看>>
Ubuntu下Wine使用教程
查看>>
Java知多少(32)instanceof
查看>>
【LeetCode】187. Repeated DNA Sequences
查看>>
JS高级前端开发群加群说明及如何晋级
查看>>
Spring 3.1 Environment Profiles--转载
查看>>
Python 的三目运算
查看>>
继承、复写、重载等总结
查看>>
SQL 语句转换格式函数Cast、Convert
查看>>
其实,SSL也不是配通了就什么都不管的~~
查看>>
请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间【转】
查看>>
10个强大的Javascript表单验证插件推荐
查看>>
北邮iptv用WindowsMediaplayer打不开的解决的方法
查看>>
软件发布版本区别介绍-Alpha,Beta,RC,Release
查看>>
cdoj 1143 传输数据 最大流
查看>>