Enrique Iglesias的《Why Not Me》是我经常循环播放的歌曲,喜欢这首歌主要是因为其超美的旋律以及演唱者优美的嗓音,累了,躺下来静静的听一遍,享受这种旋律带来的宁静,享受拉丁风格音乐的别样魅力。
Enrique Iglesias的《Why Not Me》是我经常循环播放的歌曲,喜欢这首歌主要是因为其超美的旋律以及演唱者优美的嗓音,累了,躺下来静静的听一遍,享受这种旋律带来的宁静,享受拉丁风格音乐的别样魅力。
按照导师前天的要求今天给虚拟漫游系统换了个人物,原来用的是Ogre官方自带的那个Sinbad模型,今天给换成了另一个模型,有点像非洲矿工 不过这过程中遇到了一个问题,就是人物没有阴影,我检查了下程序,设置阴影,灯光的代码都写了,why?只能求助于谷歌了, 谷歌了下ogremax model without shadow,找了几页就找到答案了,我在Ogremax的scene settings中忘记选择了阴影这一项,如下图所示 也就是建好模型后,需要创建一个灯光,然后导出时环境设置中记得选择一个阴影类型,这样在程序中就能看到阴影效果了。 参考链接 http://www.ogremax.com/Documents/OgreMaxSceneExporter-3DSMax/tutorial-configure-shadows.html
在Ogre中,要构建一个较复杂场景,如果通过手工一个个设置坐标,将会十分麻烦,这时我们就可以利用场景文件直接导入场景。 简介 场景文件(.scene)其实就是一个标准的xml文件,包含了描述场景所需要的元素,场景文件内容示例: [crayon-69d0e0abe38bf941067958/] Advanced Ogre Framework中带有3个与场景文件解析有关的类:DotSceneLoader.hpp,DotSceneLoader.cpp以及rapidxml.hpp,可以参考下该框架,了解下场景文件使用,同时该框架对Ogre学习也很有帮助。 工具 导出场景文件有很多工具,比如我开发的漫游系统用的是3Dsmax的OgreMax插件,在3Dsmax中建模好后使用OgreMax插件导出为场景文件。 由于场景复杂时,3Dsmax的渲染速度很慢,所以我才用分区域建模,地面与地面物体分开建模,地面导出为一个场景文件,地面物体导出为另一个场景文件,然后在程序中导入这两个场景文件即可(要注意各个场景文件中模型名称不能重复,即不能拥有相同模型名称,否则程序进入时报错)。 参考: Ogre DotScene Advanced Ogre Framework
irrKlang是一个跨平台的音频库,能够使用C++,C#以及所有.NET语言开发。 特点 提供强大高水平的API用于3D或2D应用中播放声音,比如游戏,科学可视化以及多媒体应用。 irrKlang 非商业用途使用免费。 支持的文件格式 irrKlang目前支持播放以下文件格式: RIFF WAVE (*.wav) Ogg Vorbis (*.ogg) MPEG-1 Audio Layer 3 (*.mp3)[2] Free Lossless Audio Codec (*.flac) Amiga Modules (*.mod) Impulse Tracker (*.it) Scream Tracker 3 (*.s3d) Fast Tracker 2 (*.xm) 除此之外,通过使用插件能很容易播放其他格式。 支持的平台 Windows 98, ME, NT 4, 2000, XP, Vista, Windows 7, Windows 8 Linux / *nix Mac OS X (x86 as well as PPC[3]) 3D音效 在所有平台与音频驱动上,irrKlang内置支持3D音效功能,可用于3D游戏中,效率高,而且不占用太多CPU。 支持的编译器与语言 目前支持如下编译器: Microsoft Visual C/C++ 6.0 - 2012 GCC 3-4 All .NET languages (C#, VisualBasic.NET, Delphi.NET, IronPhyton, F#, Haskell.NET etc.) 音效 除了支持3D声音中的多普勒效应,目前也支持如下音效,包括在2D与3D声音中: 齐声 压缩 失真 回音 参量均衡 混响 简单的API 拥有极其简单的API,如下代码展示如何用C++播放MP3文件 [crayon-69d0e0abe4c5b416102195/] 总之这是一个很容易使用的音频库,前面我用Ogre开发漫游系统时也用到了该音频库。Ogre中加入声音
今天毕业设计中期检查完,检查老师说做的不错,毕业设计也就进入写论文阶段,心情不错,故分享一首Good Time,希望自己每天都是Good Time。
没有声音会觉得很乏味,不够生动形象,更何况是一个3D漫游系统呢。所以今天给自己的系统加入了声音效果。由于Ogre只是个图像渲染引擎,加入声音的话得加入第三方库,对比了一些音频库,最后决定使用irrKlang这个音频库,跨平台,支持3D音效,使用起来也不是太难。 安装配置 首先到
时光经不住流淌,硬生生地扯痛了我的回忆。我将开口,同时感到空虚。 春色渐暖,阳光下有我们逝去的青春,我曾怀着无限的柔情思念过往。为了能够回忆过往,于是我努力地忍住了悲伤。 还记得曾经阳光下的微笑,那是一种能够拨动世界心弦的微笑,夕阳也经不起娇羞,悄悄地隐退在青山背后;还记得,那是一种过分完满的幸福,可是天空中却透露着一种神秘的苦恼,足以让人微醉微醒;还记得…… 很多事情,我们没有认真去做,只是为了不为难自己,但等我们真正想要做好的时候,却发现一切已经来不及了;很多人,我们没有努力地去争取、去珍惜,等我们回过神来的时候,才发现一切早已物是人非连同自己的力不从心。这个城市太会说谎,我们只是受了点伤故意隐藏,好逃避别人无休止的责问和突然的安慰。很多伤,我们可以铭记在心,我们也可以随着时光匆匆,假装遗忘。 还记得空荡的街景,我们只需要更有勇气一点,坚强一点,再坚强一点,就能够坚持一个人默默走完。 凌乱的思绪,嵌套在凌乱的文字里,过去的幸与不幸,只需要一个人在孤单的角落里独自黯然神伤,不需要说给他人听,也不需要去烦恼他人。 有些经历,和年龄没有关系;有些故事,并不要求一定要有结局;有些人,我们可以选择沉默,假装漠不关心。 天空的雾来的漫不经心,我的心情像画一样安静。既不知道自己为什么会莫名的感伤,也不知道为什么自己会在一个人的世界里如此宁静。 ……时光匆匆,已成过往,你可以微笑掩饰悲伤,也可以微醉微醒倒在一个人的回忆里!
在3D应用中,大多数特效都要依靠粒子系统实现。虽然我们不一定需要粒子系统实现特殊视觉效果,但是需要特殊效果时,粒子系统能让我们的需求更容易实现。 粒子系统基础 粒子系统基于脚本实现,不支持硬编码,这是为了更快地实现原型与复用。如果需要的话,我们完全能通过编写代码创造与配置出粒子系统。粒子系统通常作为模板在particle脚本中定义,能够用在应用中,从而创建出粒子系统的多种实例。 粒子系统与3D场景 因为粒子系统能够附于场景节点上,所以也能像节点一样进行变换。缩放,旋转能够影响粒子系统的发射方向。更进一步说,粒子一旦发射,就将发射到世界空间中。这意味着,场景节点移动将带动发射器移动,但是发射的粒子仍然在后面。如果需要粒子与场景节点一起移动调整,可以设置粒子系统发射粒子到本地空间中,这会携带着发射的粒子与场景节点一起移动。 粒子系统发射粒子数量有限制。一旦发射的粒子达到数量限制,粒子系统将不能发射更多,直到发射的粒子消失。默认发射粒子限额是10,不过我们可以设置更多。 粒子系统边界 粒子系统动态特性表示他们的边界盒能够按规律重新计算。在每一帧中这样做虽然消耗很多,但是Ogre默认这样做,并且Ogre每10秒会停止更新边界一次。我们能够重写该行为,用ParticleSystem::setBoundsAutoUpdated()方法让Ogre在多少秒后更新边界,该方法传入stopIn参数,告诉Ogre在给定的事件后更新边界,如果写了一个粒子系统,必须知道不能让粒子系统边界超过一定大小,使用ParticleSystem::setBounds()方法设置边界盒大小,显而易见的说,这是设置边界最有效方法。如果我们事前知道粒子系统创建的界限,也只能这样做。这里给出一种妥协方案,ParticleSystem::setBounds()与ParticleSystem::setBoundsAutoUpdated一起工作,这样可以设置出事界限大小,并且在粒子系统创建后慢慢更新。 粒子系统的更新 当一个例子系统不在可视区域内时,还会持续更新,有可能等下重新进入视觉区域。这一点很重要,如果粒子系统一离开可视区域就停止了,几秒后重新回到可视区域时保持与离开时相同的状态,这会让视觉效果不和谐。 然而考虑到性能原因,当粒子系统离开视觉区域一段预设的时间周期后,会停止更新。考虑到暂时停止的粒子系统突然进入可视区域时,会造成前面提到的问题,为了解决该问题,Ogre提供了“fast-forward” 机制,允许粒子系统在解冻后(恢复更新)提前到达“目前”状态。该特性通过ParticleSystem::fastForward()方法提前创建粒子系统时间轴使用。 粒子系统排序 我们能够按照粒子与相机的距离排序粒子。该特性默认禁用。显而易见,按照与相机的距离排序每个粒子会对性能造成影响,特别是较大的粒子系统,但有时候没有其他方法实现该特殊效果。 比如下面一张图 该粒子效果禁用排序后效果如下: 下面一张图是使用了排序的粒子系统效果: 从两图的对比可以看出,没有排序的那张图中,粒子系统底部的火焰清晰而且不自然的透过烟雾,做了排序的那张图中,烟雾隐藏了火焰,这时候性能上做些损耗是值得的。 发射器 粒子系统发射器就是发射粒子的东西。Ogre提供的发射器默认以直观空间的形式发射粒子:点发射器从单点发射粒子到空间中,盒发射器从定义好的长方体任意方向发射粒子,圆筒发射器从照定义好的圆柱体以任意方向发射粒子,椭球发射器按椭球体发射粒子,然而空心椭球体发射器从椭球体的壳发射粒子,圆环发射器从平面环的边缘发射粒子。 粒子系统发射粒子的比例,速率与方向完全可配置。粒子系统附于场景节点上,因此发射器也拥有相对父节点的位置。 粒子并不按直线发射,通常发射到环绕发射器方向的圆锥体中,通过角度参数可以定义发射器。如果我们想按直线发射粒子,该参数设置为0即可。如果想以任意方向发射,该参数设置为180,设置为90时以环绕方向向量发射到半球中。 发射粒子的速率按每秒多少粒子定义。粒子能够以设定的速率发射,或者在规定范围内以随机速率发射。同样,发射的粒子有自己的生命周期(time-to-live,TTL,以秒为单位),或者让发射器为每个粒子从生命周期范围随机随机选取。粒子发射持续时间既可以设定,也可以在某个范围内随机选取。发射期间,粒子颜色可以设置为常量或者变化的值。 我们可以在运行库中加入定制的发射器,这可能是扩展Ogre粒子系统最简单的方法。 影响器 一旦粒子发射到世界中,影响器影响着粒子运动路径与存在时间。例如,我们能够对粒子施加重力,施加风力等。 线性力 线性力对系统中的日子施加力的作用。既然力是矢量,那么就有方向与大小。大小是按矢量定义的力的大小,因此force_vector 0 50 0与force_vector 0 100 0有同样的方向,但大小是后者的一半。由于不做检查的力能够导致巨大的速度,所以能用force_application设置力如何应用。force_application average通过设置平均力的速率与粒子大量速率使粒子速率渐渐趋于稳定。force_application add允许速率一直增加(或减少)。 颜色衰减器 颜色衰减器修改存在粒子的颜色。颜色定义决定于每秒组成成分的改变。如下代码每半秒衰减一次色彩: [crayon-69d0e0abe640c496146832/] 特别注意下这不意味着无限衰减,例子中的0.5表示色彩组成成分每秒钟强度减少0.5,因此开始时是白色色彩的话,两秒后将会衰减为黑色。 缩放器 缩放器设置统一的比例因素应用到粒子大小,比例因素均衡的应用到粒子大小。 旋转器 旋转其既可以按随机或确定的速度旋转粒子材质,默认值为0,表示没有旋转。 色彩图 通过色彩图像我们能够改变色彩,而不是按照定义的衰减因素。图像可以是.png, .gif, .jpg等格式。唯一的的参数是图像文件名称。 粒子系统使用 Ogre SDK中media/particle/smoke.particle包含了一个烟火效果的粒子脚本,如下所示: [crayon-69d0e0abe6416723370575/] 材质文件在media/materials/scripts下的smoke.material,材质脚本如下: [crayon-69d0e0abe6419718550675/] 通过如下方法即可以使用上面的脚本创建一个烟火效果的粒子系统: [crayon-69d0e0abe641d541266670/] 也可以通过下面的代码创建: [crayon-69d0e0abe6420226567908/] 手动编写粒子效果脚本比较麻烦,我们可以利用别人开发的编辑器编辑粒子, 编辑器下载地址:http://pan.baidu.com/s/1sjnotat
Unauthorized reproduction or plagiarism in any form is strictly prohibited. For reprint requests, please contact via email.