您的位置:首页 > 其它

3D游戏相关问题

2017-03-30 23:33 148 查看

3D游戏相关问题

总结摄像机的使用方法

(1)如何应用左手法则决定视图,应用 Field of view 设置场景大小。

左手法则决定视图时,左手除大拇指以外四指并齐指向X轴方向(水平维度,左右方向),大拇指与四指水平面垂直,指向Z轴方向(深度维度,前后方向);此时,四指由水平握起,指向Y轴方向(高度维度,上下方向)。

Field of view 是Camera中的视野范围属性,只适用于透视镜头,用于控制视角宽度和纵向角度。







可以看出,当FOV从小到大变化时,它所摄入的角度范围也更大,但相应的物体在它的视野中会变小。

(2)添加一个 Empty 游戏对象, 添加一个 Camera 部件(Rendering 分类下),有什么效果。



在Rendering分类下为empty对象添加Camera部件,这个空对象就成为了camera,证明了camera的组件性质。

(3)Camera 部件是一个复杂的部件。有属性、方法、消息等,要慢慢积累它的使用经验。

Camera是一个设备,玩家通过它看世界。屏幕空间点用像素定义,屏幕的左下为(0,0);右上是(PixelWidth,pixelHeight).Z的位置是以世界单位衡量的到相机的距离。视口空间点是归一化的并相对于相机的。相机的左下为(0,0);右上是(1,1);Z的位置是以世界为单位衡量的到相机的距离。世界空间点是以全局坐标定义的(例如:Transform.position)。它有很多相关的函数和变量,以及继承函数和继承变量。

(4)Camera 部件继承的类树(用 Umlet 绘制)

从源码看 Camera 是继承于 Behaviour 类的,而Behaviour继承于 Component,所以Camera是组件。



(5)Camera 部件有哪些静态属性。用程序验证并管理所有的 Camera ,并在程序中 enabled 部分有用的 Camera (切换摄像机)

Skybox: 屏幕中的空白部分用天空盒的内容填充,如果没有设置天空盒,则使用背景颜色。
Solid Color: 屏幕中的空白部分用背景颜色填充。
Depth only: 仅按照物体的前后遮挡关系来呈现结果。
Don't Clear: 不清除任何颜色或深度缓存。结果是:每帧的呈现结果都叠加在一起。通常用于实现特殊的效果。
Culling Mask: 剔除遮罩。用于指定摄像机所作用的层(Layer)。
Field of View(FOV): 视野范围。只针对透视镜头,用于控制视角宽度与纵向角度。
Size: 视口大小。只针对正交镜头,设定为相当于屏幕高度的一半。
ClippingPlanes: 表示摄像机的作用范围。只显示距离为[Near, Far]之间的物体。
Viewport Rect: 控制摄像机呈现结果对应到屏幕上的位置以及大小。屏幕坐标系:左下角是(0, 0),右上角是(1, 1)。
Depth: 当多个摄像机同时存在时,这个参数决定了呈现的先后顺序,值越大越靠后呈现。
根据官方文档可查到,Camera的静态变量有以下:
* allCameras 返回所有可以使用的camera;
* allCamerasCount 翻译场景中所有照相机的数量;
* current 当前用于渲染的相机,只用于低级的渲染控制;
* main 第一个被启用的Camera会被标记为main;
* onPostRender 任何一个camera结束rendering都会触发的时间;
* onPreCull 任何一个camera开始culling的时候触发的事件;
* onPrerRender 任何一个cam
aace
era在开始rendering之前都会触发的事件;






二、总结光源的使用。光源是 GameObject 吗?

光源是每个游戏场景的重要组成部分。网格模型和材质纹理决定了场景的形状和质感,光源则决定了场景环境的明暗、色彩和氛围。

Directional light: 方向光源。通常用于模拟太阳光。光照的效果仅跟GameObject的朝向有关,跟位置、比例等无关。
Point light: 点光源。从一个位置往四面八方发出光线。类似灯泡的照明效果。
Spot light: 聚光灯。灯光从一点发出,在某个方向以锥形的范围照射。类似射灯的照明效果。
Area light: 区域光/面光源。缩放对光的范围无影响,主要通过设置宽高属性。仅在光照贴图烘焙(Lightmapping)中使用。
光源有关常用参数:
Color: 光源颜色。
Intensity: 光源的强度。
Range: 控制光线从光源对象中心发射的距离。仅针对点光源和聚光灯。
Spot Angle: 聚光灯角度。控制其锥形范围。
光源不是 GameObject。


(1)给 Camera 加一个 聚光灯 玩玩! 实现 聚光灯 跟随摄像机运动。



(2)给 sun 对象加 点光源 部件。 不许 给 sun 添加子对象。



(3)U3d 设计师 没有将 Camera,Light 设计为 GameObject ,这给开发者带来哪些好处?

可以更方便的对对象进行使用,添加,修改。对于其他 GameObject , Camera和Light的组件性质会更利于相关人员对其进行操作和设置,以及对其他对象的跟踪。

三、面向对象语言接口和超类有哪些异同?

面向对象编程的最重要的特色之一就是能够使用以前创建的类的方法和域。通过简单的类来创建功能强大的类,可以大幅地节省编程时间,更重要的是,这样做可以减少代码出错的机会。要在以前的类上构造新类,就必须在类声明中扩展这个类。通过扩展一个超类,可以得到这个类的一个新副本,并且可以在其上添加其他功能。如果对这个新类并不做任何添加工作,那么,它的工作情况与超类完全相同,新类中会含有超类所声明和继承的、具有访问权限的所有方法和域。

接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的;

实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法;

接口可以实现多重继承,而一个类只能继承一个超类;

(1)ISSActinCallback 能设计为超类吗?为什么? 画 UML 图说明

不能,因为一个类只能继承一个超类,所以U3dActions 不能继承 Monobehaviours的同时再继承一个IU3ActionsCompleted类。



(2)SSAction, SSActionManager 能设计为接口吗?为什么? 画 UML 图说明

不能设计为接口,因为接口是不能有自己的私有变量和函数实现的。



四、使用 Fantasy Skybox FREE 构建自己的游戏场景,写一个简单的总结





总结:对于这次用到的地形,Unity内置了地形编辑器,方便美术人员快速直观的制作地形。缺点是比较耗费计算资源。一般游戏工程中不使用,而用模型来取代。优点是技术人员可以利用它快速创建地形,以测试游戏实际运行效果。以及这次接触到的Lightmapping(光照贴图技术)。使用它的原因是实时光照很耗费计算资源。它的原理是利用了场景中某些静态的物体保持不变的特点,将其光照的结果保存成贴图,在游戏运行中直接应用贴图到物体上,省略了光照的计算。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: