1.4 基本概念
在进行CooRun SDK开发时,需要了解一些与SDK相关的概念。主要有:相机、单位、角度。
相机
CooRun SDK是基于OpenGl作为底层渲染引擎而开发的产品,在OpenGL中,它是通过相机来将三维的场景投影到二维的屏幕上,从而实现三维场景渲染的。根据投影方式不同,可以设置相机为透视投影和正交投影。
CooRun SDK包含了一个场景主相机来进行整个场景的渲染,这个主相机主要使用的是透视投影。此外在进行视域分析、多视域分析等功能时也会使用辅助相机来渲染场景中的目标对象。
SDK内部会调用PerspectiveCamera(fovy, aspect, near, far)
接口设置相机的透视投影矩阵。下图是相机的透视投影模拟。
其中:
- 在透视图中,灰色的部分是视景体,只有视景体中的物体才有可能会被渲染到二维屏幕上,超出视景体的物体会在渲染前被裁剪掉。
- fovy是视景体在垂直方向上的张角(角度制),如侧视图所示。
- aspect是视景体的宽高比(等于width/height),是照相机水平方向和垂直方向长度的比值。
- near和far分别是相机到视景体最近、最远的距离,均为正值,并且far应大于near。
在设置场景相机时,SDK默认的垂直张角(fovy)为35。宽高比为SDK控件所占区域比例,并且会设定远近截面的距离值,来保证三维场景能正常显示。并且我们提供了相应的方法来更新场景相机参数,具体可参考:相机操作。
此外SDK提供的视域分析,也是用来模拟相机照射的效果。在视域分析中需要设定相机的垂直张角、水平张角、相机的观察点位置和目标点位置来确定最终相机的效果的。
单位
在CooRun SDK中会涉及到比较多的坐标、量度角、距离、面积等值的应用,在使用时它们都是有自身的单位的。
坐标
CooRun SDK中包含三种类型的坐标:屏幕坐标、世界坐标、经纬度高程坐标。并且这三种坐标之间是可以相互转换的,具体可参考坐标转换。
1. 屏幕坐标是基于三维场景在显示屏幕上的二维坐标。单位是像素。它是以三维场景左上角为坐标原点,以屏幕水平向右为x轴正方向,以屏幕垂直向下为y轴正方向形成的二维直角坐标系。
2. 世界坐标 是构建整个三维场景的坐标,它是以球心为原点建立的坐标系。
3. 经纬度高程坐标 是基于某个坐标系下的球面坐标。经纬度单位是像素,高程单位是米。CooRun SDK默认是基于WGS1984坐标系下的坐标。它的经度是从本初子午线为0度开始,向东为正、向西为负,向东从0到180度,向西从0到-180度;纬度是从赤道为0度开始,向北从0到90度,向南从0到-90度;高程值是指坐标位置到基准面的距离。 (84坐标的基准面是以地心为中心的全球通用椭球面)
CooRun SDK对外开放的接口中使用的大部分都是经纬度高程坐标。
量度角
CooRun SDK在进行数学计算时会涉及到量度角计算操作。量度角一般会以角度和弧度两种方式表示。
角度的单位是度(符号为°)。一个圆周角是360度,一度是一个圆周角的1/360。
弧度是量度角的另外一种表示,数学上都是以弧度来计算的。角度和弧度关系是:2π弧度=360°,1°≈0.0174533弧度,1弧度≈57.29578°。
1) 角度转换为弧度公式: 弧度=角度÷180×π。
2) 弧度转换为角度公式: 角度=弧度×180÷π。
注: 在使用SDK的接口时需注意是使用的角度还是弧度。
距离
在进行三维场景的距离量算时,默认使用的单位是米,代表的是两点之间的直线距离。也可以将单位切换成公里、海里。
面积
在进行三维场景的面积量算时,默认使用的单位是平方米,代表的是绘制范围内的面积。也可以将单位切换成公顷、平方公里、平方海里。
角度
CooRun SDK中的对象(包括相机)在三维场景中是有相对位置和朝向的。相对位置即为对象的中心点在三维场景中的坐标值。朝向即为对象在该位置的角度,分为三个角度:偏移角、俯仰角、翻滚角。
在计算对象的角度之前,会根据对象所在位置形成局部坐标系。对象的局部坐标系以及角度定义如下图所示:
偏移角
偏移角是绕局部坐标系Y轴旋转形成的角度。它以正北方向为0度,逆时针旋转为正方向。偏移角的取值范围为:0度-360度。超出该值会自动换算到该范围内。
俯仰角
俯仰角是绕局部坐标系X轴旋转形成的角度。俯仰角的0度代表水平方向,正值代表向上抬头,负值代表向下低头。并且俯仰角的取值范围为:-89度 - 89度。
翻滚角
翻滚角是绕局部坐标系Z轴旋转形成的角度。翻滚角的0度代表水平方向,正值代表向左翻滚,负值代表向右翻滚。并且翻滚角的取值范围为:-90度 - 90度。