zoukankan      html  css  js  c++  java
  • 场景管理

    场景对象创建
    场景中的所有对象,包括可移动与不可移动的:lights, cameras, entities,particle system,
    billboards, skyboxes, static geometry , world geometry.都由场景管理器来创建。场景中的
    任何东西都由场景管理器来管理。任何通过场景管理器得到的东西,都必须由场景管理器来销毁。
    用户不能delete通过由场景管理器得到的指针。
    场景结点只有一个父结点,可能有多个子结点。可以随意的attach 和 detach 这些场景中的结点。
    在明确告诉场景管理器销毁这些结点前,它们总是存在。如果不想渲染场景中的某些结点上的内容,
    我们可以很方便地对她们进行detach.场景中总是存在一个Root结点。可以把多个内容对象attach到
    同一个结点上。不能同时把一个实例对象挂到两个场景结点上,一个场景结点也不能有两个父结点。
    总是场景结点在执行空间操作(平移,旋转,缩放)而不是实体对象。
    场景查询
    场景管理器的第二个最常用的功能是进行场景查询。包括射线查询,球查询,绑定盒查询,绑定平面
    查询,相交查询。Terrain clamping:在崎岖不平的路上,勇敢地向下发射一束光,不管你告诉我你有
    多高,我永远把你踩在脚下..(是不是不太像笔记?^_^)。所有这些查询都是 maskble的,这表明可
    以在查询时过滤掉不关心的对象类型。如球查询时,只想看看它包含了多少lights,其他的对象即使包含
    在球里也不必返回,实际上根本不用计算。
    空间关系与3D变换
    world , parent , local世界空间中的变换是相对于全局坐标系的源点(0,0,0),这也是root scene node的位置。因此可以认为世界空间中的变换是相对于Root scene node的。父空间中的变换是相对于场点结点的父结点的,本地空间的变换是相对于物体所挂接的结点的。大多数情况下,我们会在父空间中做平移,在本地空间中做旋转,ogre中的这些操作,都是在上述的这种方式下。
    object space
    从模型导出的顶点数据与它的源点之间的关系是不变的,当它被挂到场景结点上,这个结点就是认为是
    它的源点。建模时与导出时不假设测量单位,以世界单位导出(也就是无单位)。
    ogre平移与设置位置不同:平移可以有多个参照点(world,local,parent space),而用setPosition()
    时,总是相对于parent-space 坐标系的。
    可移动的场景对象
    基于资源的对象:最普通的是mesh(陪伴着skeleton),这种类型的对象被资源管理系统管理。
    场景管理器不负责实际的装载,它调用Ogreuq资源管理器来完成。
    基于四边形的对象:粒子系统,公告板,ribbon trail,overlay,天空盒。它们通常是面向相机的,
    使用动态材质。它们的主要资源是脚本,这些脚本定义了如何映射材质,以及它们的生命期(对于粒子系统与ribbon trail来说)。天空盒直接用场景管理器来定义。
    skyplane,skydome,skybox
    主要的相似点是它们与相机保持一个常量的距离。它们可以在场景中其它对象
    之前或是之后渲染。它们使用普通的ogre material,因此纹理动画与其他纹理没有什么不同。它们可以
    被场景管理器打开或关闭,与相机的距离也可以设置。
    skyplane 是一个平面。用距离和法线定义它与相机的位置关系。可以弯曲,可以分多个段,可对纹理进行多次平铺。skydome由五个平面组成,底部空。使用改变纹理坐标的方式来达到外观上的曲率变化。有一个值用来调节,值越低,曲率越柔和,值越高,越陡峭。skybox 像skydome,但他不能“弯曲”材质坐标。它可以使用立方材质。可使用硬件加速功能达到很好渲染效率。

    使用光的限制:单个通道通常最大支持8个灯。使用更多的灯,通过多通道。
    光与物体之间的距离,决定光对物体实际的影响。Ogre支持点光源,平等光,聚光灯。
    世界几何
    当创建基于mesh的景物或关卡,应该分成较小的部分,以便于裁减。Paging Scene Manager提供了这样的工具。
    空间分割方案
    Ogre是基于硬件加速渲染引擎,因此以最大化几何体batching的方式会比基于实际多边形进行空间分割
    效果要好的多。Modern GPUs prefer to render a few large batches of geometry instead of
    many small batches.
    The more visible geometry you can render in a single batch, the better your application’s
    performance is likely to be (within reason, of course; other classic issues such as fillrate and
    overdraw can still take over if you just blindly blast polygons at the GPU, batched or not).

    静态几何使用注意
    静态几何在使用之间必须被建立。
    使用相同材质的几何体将被放到同一渲染操作中(batch):different materials still require a separate batch.
    努力的方向是,最大化一个调用的三角形数,最小化调用的次数。
    不能移动被包含在static geometry中的对象。只有一个世界转换应用到完整的static geometry对象上.
    比同样规模的movable geometry占用更多的内存。
    假如组中的任何东西在视锥之内,那么组中的所有对象都将被渲染。

  • 相关阅读:
    2016/11/10 kettle概述
    2016/11/07 线程的创建和启动
    python3 pip使用报错
    django建表报错
    django学习
    前端系列
    git使用标准
    我的Python之路
    nginx优化
    python安装包的时候报错
  • 原文地址:https://www.cnblogs.com/lizhengjin/p/1874184.html
Copyright © 2011-2022 走看看