摄像机

中的示例简单的照相机本节介绍了如何定义透视和正交摄影机,以及如何通过将它们附加到节点来将它们集成到场景中。本节将解释这两种类型的摄像机之间的区别,以及摄像机的一般处理方法。

透视和正交相机

摄像机有两种:观点摄像机,其中观察体积是一个截短的棱锥体(通常称为“视锥体”),以及正字法摄影机,其中的观察体积是一个矩形框。主要区别在于使用观点摄影机会导致正确的透视失真,而使用正字法照相机可以保持长度和角度。

中的示例简单的照相机节包含每种类型的一个摄影机、索引0处的透视摄影机和索引1处的正交摄影机:

"cameras" : [
  {
    "type": "perspective",
    "perspective": {
      "aspectRatio": 1.0,
      "yfov": 0.7,
      "zfar": 100,
      "znear": 0.01
    }
  },
  {
    "type": "orthographic",
    "orthographic": {
      "xmag": 1.0,
      "ymag": 1.0,
      "zfar": 100,
      "znear": 0.01
    }
  }
],

这个type可以把它作为摄像机的一个字符串“透视图”"orthographic". 根据这种类型照相机对象包含camera.perspective对象或camera.orthographic对象。这些对象包含定义实际查看体积的附加参数。

这个camera.perspective对象包含相貌比属性,该属性定义视口的纵横比。此外,它还包含一个名为yfov,代表 Y方向视野. 它定义相机的“打开角度”,以弧度表示。

这个camera.orthographic对象包含xmag公司ymag属性。这些定义了相机在x和y方向的放大倍数,基本上描述了观察体积的宽度和高度。

两种相机类型都额外包含znearzfar公司属性,即近剪裁平面和远剪裁平面的坐标。对于透视相机zfar值是可选的。当它丢失时,将使用一个特殊的“无限投影矩阵”。

解释相机、视图和投影的详细信息超出了本教程的范围。重要的一点是,大多数图形api都提供了直接基于这些参数定义查看配置的方法。通常,这些参数可用于计算摄像机矩阵. 摄像机矩阵可以倒置,以获得视图矩阵,稍后将与模型矩阵获得模型视图矩阵,这是渲染器所需的

摄像机方位

Acamera可以变换为在场景中具有一定的方向和观看方向。这是通过将相机连接到节点. 每个node可能包含照相机那是附属于它的。在简单的摄影机示例中,摄影机有两个节点。第一个节点是索引为0的透视摄影机,第二个节点是索引为1的正交摄影机:

"nodes" : {
  ...
  {
    "translation" : [ 0.5, 0.5, 3.0 ],
    "camera" : 0
  },
  {
    "translation" : [ 0.5, 0.5, 3.0 ],
    "camera" : 1
  }
},

如图所示场景和节点节中,这些节点可能具有定义节点的变换矩阵的属性。这个全局变换然后定义场景中摄影机的实际方向。可以任意应用动画对于节点,甚至可以定义摄影机飞行。

当摄像机节点的全局变换为单位矩阵时,摄像机的视点在原点处,观察方向沿负z轴。在给定的示例中,节点都具有translation关于(0.5, 0.5, 3.0),这将导致摄影机相应地进行变换:它在x和y方向平移约0.5,以查看单位正方形的中心,并沿z轴平移约3.0,使其稍微远离对象。

相机实例与管理

glTF的JSON部分可能定义了多个摄像机。每个摄像机可以被多个节点引用。因此,glTF资源中显示的摄影机实际上是实际摄影机的“模板”实例:每当一个节点引用一个摄影机时,就会创建该摄影机的新实例。

glTF资源没有“默认”摄影机。相反,客户端应用程序必须跟踪当前活动的摄像机。例如,客户端应用程序可以提供一个下拉菜单,允许用户选择活动摄像机,从而在预定义的视图配置之间快速切换。通过更多的实现工作,客户机应用程序还可以为摄像机控件定义自己的摄像机和交互模式(例如,用鼠标滚轮缩放)。然而,在这种情况下,导航和交互的逻辑必须由客户机应用程序单独实现。图15a显示了这种实现的结果,用户可以从glTF资源中定义的活动摄影机中选择活动摄影机,也可以选择可以用鼠标控制的“外部摄影机”。

results matching ""

    No results matching ""