场景管理机制
场景管理机制能使引擎更加有效率的进行碰撞测试,拾取算法,阴影算法,裁剪算法等需要遍历整个场景的各种操作.而且对骨骼动画也有天生的好处.
通常我们把场景中物体的层次关系用一张场景图(Scene Graph)来表示.场景图中最下层的叶子节点是几何体.场景中所有的几何体数据都只存在于叶子节点中.场景中除叶子外,每个节点都有1个以上的子节点,除最初的节点外,每个节点有且只有一个父节点.
每个节点所处的坐标系都是不同的,每个节点中都包含了一个Local Transform,用来记录从当前坐标系到父坐标系的线性变换. 初节点的Local Transform表示它到World坐标系的变换.因此,我要计算任一节点的世界坐标,需要用它的Local Transform去乘它的父节点的Local Transform,然后再乘爷爷节点的Local Transform,.....一直到乘初节点的Local Transform.
因为我的引擎是争对OpenGL设计的,所以一切的线性变换都符合右手准则, 即 V' = MV .其中V是向量,M是线性变换矩阵.如果用L0表示当前节点的Local Transform,L1 为父节点的, L2为爷爷节点的..... 那么对W0 的计算 应该是 Ln * Ln-1 *.......*L1*L0;
通常我们把场景中物体的层次关系用一张场景图(Scene Graph)来表示.场景图中最下层的叶子节点是几何体.场景中所有的几何体数据都只存在于叶子节点中.场景中除叶子外,每个节点都有1个以上的子节点,除最初的节点外,每个节点有且只有一个父节点.
每个节点所处的坐标系都是不同的,每个节点中都包含了一个Local Transform,用来记录从当前坐标系到父坐标系的线性变换. 初节点的Local Transform表示它到World坐标系的变换.因此,我要计算任一节点的世界坐标,需要用它的Local Transform去乘它的父节点的Local Transform,然后再乘爷爷节点的Local Transform,.....一直到乘初节点的Local Transform.
因为我的引擎是争对OpenGL设计的,所以一切的线性变换都符合右手准则, 即 V' = MV .其中V是向量,M是线性变换矩阵.如果用L0表示当前节点的Local Transform,L1 为父节点的, L2为爷爷节点的..... 那么对W0 的计算 应该是 Ln * Ln-1 *.......*L1*L0;