热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Demo_Lighting

这个DEMO主要有3个知识点:1.Light类Light类继承于MoveableObject类。所以它拥有MoveableObject类的一切属性。光源
这个DEMO主要有3个知识点:

1. Light

Light类继承于MoveableObject类。所以它拥有MoveableObject类的一切属性。

Light.PNG
    光源有
3种类型,分别是点光源 (Point lights),定向光源 (Directional lights),和聚光灯 (Spot lights),在Light中用一个枚举表示:

enum LightTypes
{
   
LT_POINT,
   
LT_DIRECTIONAL,
  
 LT_SPOTLIGHT
};

光源发出的光可分为三种成分:环境光(Ambient Light),漫射光(Diffuse Light),镜面光(Specular Light)。在OpenGL中环境光可以来自光源也可以不来自光源。Ogre中的Light没有指定环境光的设置(环境光的设置是通过 SceneManager::setAmbientLight函数来设置),但有其他两种成分的设置,并可以设置各种光的衰弱公式的参数。

 

2. Billboard / BillboardSet

Billboard 就是一类总是面向摄像机的图元,是有2个三角形构成的矩形。它们通常用来实现一些特效,比如粒子系统。公告版适用于那些从各个方向看都一样的对称物体。

Ogre中,公告版是以公告版集的形式出现,所以你不要自己直接创建它。如果你需要的话就先创建一个BillboardSet,一组有相同尺寸,材质,而且相当接近的公告板可以放置到一个BillboardSet中去。BillboardSet相当于BillboardManager,它可以对公告版进行创建,删除,修改。

 

3. 如何使用Controller/ControllerValue来控制Object

Controller.h 中有 3 个相关类,ControllerFunction,ControllerValue,Controller。他们的基本用途就是Controller 通过ControllerFunction 来使得一个源 ControllerValue 变成目标 ControllerValue。这样做有很多灵活性,用户可以继承于ControllerFunction 来定义自己的ControllerFunction 并可以把它插入到 Controller 中。例如:Ogre提供了一个ControllerFunction 叫做 WaveControllerFunction 它允许你把传入的源值通过各种波形转换成目标值。他们的类图如下:

Controller.PNG
在这个例子中:

mControllerManager->createController(mControllerManager
 ->getFrameTimeSource(), mRedLightFlasher, mRedLightControllerFunc);

可以看出

ControllerValuemControllerManager->getFrameTimeSource(),它是一个以时间为参数的周期性的值。

目标 ControllerValuemRedLightFlasher,它的定义如下:

mRedLightFlasher = ControllerValueRealPtr(

            new LightFlasher(mRedLight, mRedLightBoard, ColourValue::Red));

其中LightFlasher根据传入的值来设置光线的强弱。

控制函数mRedLightControllerFunc的定义如下:

mRedLightControllerFunc = ControllerFunctionRealPtr(

            new LightFlasherControllerFunction(Ogre::WFT_SINE, 0.5, 0.0));

其中参数Ogre::WFT_SINE代表波形,0.5代表波的频率,0.0代表波的相位。它根据传入的值(这里是指时间,波形,频率和相位的混合)通过函数计算得到目标ControllerValue来指定光线的强弱。

 

ControllerManager

   这个类用来管理Controller实例,它负责监视所有Controller的注册和更新。同时他也提供了一些实用的Controller。比如

Controller* createTextureAnimator(TextureUnitState* layer, Real sequenceTime);

它创建的Controller可以通过纹理的当前帧数和时间来控制纹理动画。

 

CallControllerManager.PNG                     
一帧中更新Controller的序列图


转:https://www.cnblogs.com/SweetDream/archive/2006/02/24/337222.html



推荐阅读
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文介绍了一种在ANSI C中动态分配二维数组的方法。通过创建指针数组并为每个指针分配连续空间,可以灵活地管理内存。文章还讨论了一些常见的错误和注意事项。 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 本文介绍了一种使用 JavaScript 计算两个日期之间时间差的方法。该方法支持多种时间格式,并能返回秒、分钟、小时和天数等不同精度的时间差。 ... [详细]
author-avatar
lashley谢
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有