osg的view、viewer、compositeViewer

osg的view、viewer、compositeViewer

官网对于view和viewer的区别,viewer和composite的区别都做了解释,不过第二篇文章写的有点绕口,干脆我重新解释一下吧。

从OpenGL说起

对于OpenGL来说,矩阵变换分为mvpw,m是模型矩阵(model matrix),将物体从局部坐标系映射到世界坐标系。v和p分别为观察矩阵(view matrix)和投影矩阵(projection matrix),分别对应相机的外参(相机的位置和方向)和内参(相机的视角和焦距)。w则为窗口矩阵(window matrix),根据窗口的长宽的不同取不同的值。
当绘制一个物体时,我们需要将物体的顶点信息和变换矩阵从cpu传递给gpu,gpu再通过顶点信息和变换矩阵将物体绘制出来。下面来解释这些矩阵的用处:

  1. 模型矩阵
    如果我们不使用模型矩阵,而是直接输入物体在世界坐标系的顶点数据,当我们想把一个相同的物体绘制在不同的位置,那么,我们需要从cpu传递多份物体在世界坐标系的顶点信息给gpu;而如果我们使用模型矩阵,只要从cpu传递一份物体在模型坐标系的顶点信息和多个不同的模型矩阵即可。可以大大的减少传递的顶点数据,提高运行效率。
  2. 观察矩阵和投影矩阵
    与上一点类似。我们同样会遇到这样的使用情况:需要从多个角度观察同一个物体。这时,使用观察矩阵和投影矩阵可以提高效率。

view、viewer和compositeviewer的区别

同时存在于同一个世界坐标系的多个物体的集合称为场景(scene)。对于一个场景,可以用不同的相机(camera)去观察,不同的相机对应不同的观察矩阵和投影矩阵。把一个场景和多个相机统一管理起来的类被称作view。
当绘制一个view时,需要管理线程、frame函数和一些统计信息。管理这些的类称为viewer。有时后需要同时管理多个view,也就是多个scene,这个类称为compositeviewer。

你可能感兴趣的:(OSG)