ogre脚本完全说明.docx
- 文档编号:6361660
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:35
- 大小:40.33KB
ogre脚本完全说明.docx
《ogre脚本完全说明.docx》由会员分享,可在线阅读,更多相关《ogre脚本完全说明.docx(35页珍藏版)》请在冰豆网上搜索。
ogre脚本完全说明
Ogre学习记录
2008-04-2109:
16 3213人阅读 评论(3) 收藏 举报
blend脚本border汇编网格scroll
1:
设计初衷
它设计初衷是完全跨平台的。
抽象的接口隐藏了平台相关的细节。
它设计初衷是大幅度支持扩展的。
支持多种场景类型,独立出平台和3D接口限制。
2:
基本类结构关系
Roo:
对象为一切的入口,它负责创建Ogre的所有基础元素,三大基础元素大致包括:
场景管理器,绘制系统,资源管理器。
场景管理器:
场景节点,动态对象。
资源管理器:
资源组管理,资源管理
渲染模块:
硬件缓冲区管理,渲染系统,渲染窗口
3:
关键词
Root:
:
Ogre系统入口,程序一开始就应当创建,最后释放,它帮助我们获得其他元素的指针。
甚至包括StartRender()
RenderSystem:
:
渲染系统。
是对3D渲染API的一个封装。
一般来说无需手工调用,场景管理器对对其进行控制,只有在实现一些特殊需要的时候,可以获取使用。
SceneManager:
负责对整个场景中内容的创建和管理。
包括静态地形场景,摄象机,动态对象,光线,材质等都归属其管理。
场景管理器根据室内室外等渲染管理进行了不同类型的优化,在创建时可以传参进行选择。
ResourceGroupManager:
资源组管理器包含多种的资源管理器,例如纹理,网格Mesh等的资源加载管理器,他们各司其职管理其所负责的资源数据对象。
和渲染系统一样,大多数情况下他们会被自动调用的进行资源加载,我们仅需要做的就是Root:
:
getSingleton().addRessourceLocation()告诉Ogre从哪儿加载资源即可,除非个别特殊需求,我们动态的手工控制时候可以TextureManager:
:
getSingleton()获取相应的资源管理器进行处理。
Mesh对象:
就是一个具体的模型,而在一些情况下,Mesh对象仅指那些能够移动的对象,那些静态对象即不属于Mesh对象之列。
Ogre有自己的一套定义的Mesh结构,即.mesh,该文件格式可以被网格工具编辑。
Entity实体:
是一个可移动的对象实例。
和Mesh的不同是,实体包括网格,但若网格未和场景结点绑定起来,则不可使用该实体。
我们可以修改场景结点来获得实体的修改,但此时Mesh实际是没有变化的。
注意:
实体是允许有子实体的,网格也一样有子网格。
每一个子网格可以有自己的材质。
相关函数如下:
SceneManager:
:
CreateEntity()由场景管理器去创建实体对象,Entity:
:
GetSubEntity()获取子实体指针,再SetMaterialName()修改材质。
材质:
它是由资源管理器管理,但在场景管理器中也保存着一份材质的列表。
它的属性有默认的,SceneManager:
:
GetDefaultMaterialSetting()函数可以获取其默认属性,当然也可以修改。
值得注意的是,OGRE允许在程序运行时,通过材质脚本对材质进行设置。
Overlays层:
一般是拿来做一些不接收用户交互信息的UI面层的。
当然游戏中也可以设置一些层元素作为游戏内容,例如飞机驾驶舱,不接受任何用户交互信息,并且要求最前端显示。
层有一个专门的层管理器,它负责层的创建释放等工作。
每个层有自己的一个Z深度信息,通过它进行遮挡关系的计算。
另外,每几个层可以分为一个小组进行统一控制,这个在Ogre中被称为层容器OverlayContainer。
每个层可以进行独立的旋转缩放等功能。
它允许是2D或3D。
OverlayManager:
:
getSingleton().createOverlayElement(“Panel”,“myNewPanel”)。
4:
Ogre的脚本
1:
材质脚本。
在资源组管理器初始化完毕时,装载材质脚本,OGRE会自动的在组相关的资源位置查找”.materal”扩展名的文件,并对这些脚本进行语法解析。
手动解析也可以MaterialSerializer:
:
parseScript()但是注意的是:
解析脚本时并没有对脚本中定义的全部纹理等资源进行加载。
所以,在我们访问一个材质的时候,一定要确保它已经装载,或者,我们手动将此材质Load()一次再进行访问。
另外,材质名必须唯一,且不可有”:
”号。
格式:
以{},空格,//作为标识符。
//后跟注释,不支持多行注释。
{}之间代表为一个解析单元
每一个materialXXX代表是一个材质单元。
其中,每一个technique代表一个材质渲染手法,pass是每个渲染通路模式,texture_unit则是一个纹理单元。
一个材质脚本允许有多个渲染手法技术,一个渲染手法技术中允许有多个渲染通路模式,一个渲染通道允许有多个纹理单元。
渲染手法技术Techinique:
一个“渲染手法技术”就是一个单独的渲染物体的方法。
多个技术的存在原因是为适用不同的显卡以及根据远近关系对一个物体进行不同的渲染。
技术的排列需要一定顺序,一般来说,最常用最的技术放在脚本最前面,
格式为:
Techinique 技术名
不命名的技术默认会以其序列号进行命名,注意,技术名不可重复。
方案技术scheme:
因为我们对不同的显卡标准或根据某中不同的需求,设计出不同的技术,每种技术所适用的环境方案需要我们指出。
格式为:
scheme 方案名
默认的方案是default,若我们某一个技术适用于开启hdr,Shader3.0的方案,我们只需对该技术设置方案为schemehdr_open_shader_3_0即可。
细节层次索引lod_index:
每一个技术都必须对应一个细节层次索引。
一般来说,默认的都是0,即最近最优秀的渲染技术,当我们需要对远处细节进行渲染时,则设置这个值吧。
格式为:
lod_index 数值层级
虽说lod的数值层级是从0-65535,一般设置2-4层就差不多了吧。
因为技术有一定的排列顺序,所以,我们一般是将index大的技术放在后面。
细节层次距离lod_distances:
这里指定使用不同的细节层次的距离值,注意,该属性必须在所有的技术块外面进行声明指定。
如例子中所标识:
lod_distance200就代表,在0-200这个距离内,我们使用细节层次为0的技术,在200以上的则使用细节层次为1的技术
Lod_distance200700.5则表示在0-200时我们使用细节0,200-700.5这段距离使用细节1的材质技术,700.5以上使用细节2的材质技术。
200和700.5间使用空格间隔。
所以技术的排列顺序通常为这样
MaterialMyTestMaterial
{
lod_distances200
TechniqueLod_0_Hdr_Open_Shader_3_0
{
Lod_index0
Pass0
{
Texture_unit
{
//…..
}
Texture_unit
{
//…..
}
}
Pass1
{
Textureunit
{
//….
}
}
}
TechniqueLod_0_Hdr_Close_Shader_1_0
{
Lod_index0
Pass
{
Texture_unit
{
//…..
}
Texture_unit
{
//…..
}
}
}
TechniqueLod_1_Hdr_Open_Shader_3_0
{
Lod_index1
Pass
{
Texture_unit
{
//…..
}
Texture_unit
{
//…..
}
}
}
TechniqueLod_1_Hdr_Close_Shader_1_0
{
Lod_index1
Pass
{
Texture_unit
{
//…..
}
Texture_unit
{
//…..
}
}
}
}
Pass渲染通路:
再次强调一个概念:
一个材质脚本,为了适应不同的显卡和LOD细节层次技术,我们允许有多个技术,为了加速充分的使用GPU,每个技术中同时又支持多通道的渲染,每个渲染通道内,同时又允许有多个纹理单元。
首先这个改变必须明确理解才能顺利的进行材质脚本的设计。
我们在“渲染通路”这层可以设置以下属性:
· ambient 材质的环境光反射系数
格式是ambientredgreenbluealpha
每个值要求为0.0-1.0之间,例如ambient0.20.21.01.0代表每个顶点对环境光的反射系数。
注意:
若关闭了动态光照和纹理层的光照色彩混合的话,该项就不起作用了。
默认值为全白
· diffuse 材质的漫反射系数
格式是diffuseredgreenbluealpha其他同上。
· specular 材质的镜面反射系数
格式是specularredgreenbluealphaShininess,最后多了一个参数,是闪耀值,该值处于1-128之间。
注意:
若该值较大则会令人感到耀眼的反射。
· emissive 材质自发光系数
格式是emissiveredgreenbluealpha
· scene_blend
设置渲染通道和现有的渲染层内容混合方式。
有预设的四种方式
格式为scene_blendadd或scene_blendmodulate/alpha_blend/colour_blend
Add 是将渲染出的颜色和亮度一起叠加到渲染场景中,相当于“scene_blendoneone”
Modulate 是将渲染输出的颜色叠加到渲染场景中,相当于”scene_blenddest_colourzero”
alpha_blend 是将渲染输出的亮度叠加到渲染场景中,相当于”scene_blendsrc_colourone_minus_src_colour”
colour_blend 是将渲染输出的alpha值进行遮罩缓和。
相当于”scene_blendsrc_alphaone_minus_src_alpha”
当然,我们也可以不使用预设的方式,进行自定义源和目标的混合因数
格式为scene_blendsrc_factordest_factor
这样最终渲染出的颜色就是(渲染通道的结果*src_factor)+(渲染场景的颜色*dest_factor),其中src_factordest_factor两个参数可选以下值
one
常数值1.0
zero
常数值0.0
dest_colour
已存在的像素颜色
src_colour
纹理像素颜色
one_minus_dest_colour
1-(dest_colour)
one_minus_src_colour
1-(src_colour)
dest_alpha
已存在的像素alpha值
src_alpha
纹理像素alpha值
one_minus_dest_alpha
1-(dest_alpha)
one_minus_src_alpha
1-(src_alpha)
例如:
scene_blendonezero(代表渲染出的纹理完全覆盖其后的渲染场景,即渲染管道出来的纹理是完全不透明的) ß默认的混合模式也正是这种。
· depth_check
是否开启深度缓冲检测 格式为depth_checkon或depth_checkoff
· depth_write
是否打开深度缓冲写入。
格式为depth_writeon或depth_writeoff
默认的时候深度缓冲是打开的,个别时候我们需要渲染一系列透明物体的关系时候,则将其关闭。
· depth_func
写入象素前的深度比较函数。
格式为depth_funccompareFun
其中compareFun可以取下面值之一。
always_fail
永远不向渲染目标写入像素
always_pass
总是将像素写入渲染目标
less
如果将要写入的像素的深度小于现在缓冲区内容的深度,则写入
less_equal
如果将要写入的像素的深度小于等于现在缓冲区内容的深度,则写入
equal
如果将要写入的像素的深度等于现在缓冲区内容的深度,则写入
not_equal
如果将要写入的像素的深度不等于现在缓冲区内容的深度,则写入
greater_equal
如果将要写入的像素的深度大于等于现在缓冲区内容的深度,则写入
greater
如果将要写入的像素的深度大于现在缓冲区内容的深度,则写入
默认值是depth_funcless_equal,注意:
当我们关闭深入缓冲检测的话,该函数无效。
· depth_bias
无法理解。
不会用。
· alpha_rejection
对渲染管道的材质纹理进行alpha信息剪裁。
格式为alpha_rejectioncompareFunvalue
其中value取值范围是0-255,例如 alpha_rejectionless_equal122则代表抛弃渲染管道中alpha值大于等于122的象素。
附注:
考虑到硬件兼容,Value最好是0-128之间。
· cull_hardware
硬件剪裁方式。
格式为cull_hardwareHCutFun
HCutFun枚举下列三种方式:
clockwise/anticlockwise/none
clockwise将逆时针的三角型都cut掉(即CUT镜头反面)
anticlockwise将顺时针的三角型都cut掉(即CUT镜头正面)
none 不做任何剪切。
默认为clockwise
· cull_software
软件剪裁方式。
格式为cull_softwareSCutFun
SCutFun 枚举以下三种格式:
back/front/none
实际上,这个和硬件裁减是类似的,不过,对于一些动态的物件建议不要开启该项,消耗很大。
默认是back剪裁。
· lighting
是否开启动态光照。
格式为lightingon/off
注意:
使用了顶点程序,此属性无效。
动态光照一旦关闭,环境光反射,镜面反射光,放射光,阴影等属性均无效。
默认为on
· shading
Ogre阴影模式。
格式为shadingflat/gouraud/phong
Flat不进行插值,每个平面的阴影都由该平面的第一个顶点色决定。
Gouraud 对平面上每个顶点颜色进行线形插入计算。
Phong 全平面使用顶点法线向量。
效果好,代价高,部份硬件无法支持此属性。
默认为:
gouraud
· polygon_mode
栅格化方式。
格式为polygon_modesolid/wireframe/points
面,线,点的栅格化。
默认当然是面solid模式。
· fog_override
是否开启雾化。
fog_overridetrue/false
当fog_overridetrue的时候就需要顺序跟出以下参数
雾的type:
none无雾。
相当于fog_overridefalse
Linear 线性雾。
从start到end之间有雾
Exp 几何方次性雾。
受浓度density影响
Exp2 几何二次方增加。
受浓度density影响
雾的颜色color:
RGB三种颜色值。
0.0-1.0之间
雾的浓度density:
设置几何方次性雾的浓度。
对线形雾不影响,但也必须写上进行占位。
雾的起始位置start:
对非线性雾无效,但必须写上占位。
雾的结束位置end:
对非线性雾无效,但必须写上占位。
例如:
fog_overridetrueexp1110.00210010000开启几何次方雾。
颜色为1,1,1白色,浓度为0.002(若是线性则代表,离镜头100至10000之间的距离有雾)
· colour_write
是否关闭渲染通路的颜色写入功能。
colour_writeon/off
该功能一旦关闭,则代表渲染通路不可输入任何的颜色渲染。
仅在初期初始化深度缓冲区时个别时间有用。
默认为开on
· max_lights
此渲染通路最大光源数量。
一般使用默认为8格式为max_lights8
· start_light
· iteration
是否对渲染通路进行迭代渲染。
默认为仅渲染一次,格式为Iterationonce
Iteration5 代表本渲染通路将被重复执行5次渲染。
Iterationonceper_lightpoint 则代表本渲染通道将每个光源点进行一次渲染。
Iteration5per_lightpoint则代表本渲染通道将每个光源点进行5次渲染。
· point_size
· point_sprites
· point_size_attenuation
· point_size_min
· point_size_max
Texture_unit 纹理单元
我们在PASS渲染通道处已经进行了一次整体的渲染环境设置,然而,在每个纹理单元,我们还可以对单独的纹理进行渲染属性设置。
· texture_alias
设置一个纹理的别名。
类似于技术的别名。
格式:
texture_alias纹理别名
默认该别名就是纹理单元的名字。
· texture
本层要使用的静态纹理图象名字。
可以简单的格式为
Texturexxx.jpg (注意:
纹理文件名禁止有空格)也可对其属性进行详细的设置。
如下
Texturexxx.jpg2d8nonePF_A8R8G8B8
2d是装载的纹理类型,类型实际上包括1d(1象素的纹理点),2d(纹理面,默认也是该项),3d(3D带深度的纹理),cubic(有些类似天空盒式的贴在立方体内侧6个2D纹理,但是仅可贴同一种纹理,不如使用cubic_texture)
8 是MipMap的层级,默认是unlinited,代表可以无限的对纹理进行mipmap,我们这里设置为8代表生成8个层级递减的MIPMAP。
注意:
若多个材质脚本中使用同一个纹理,切记他们的mipmap数量必须一致。
None 这项是我们指定的单独的透明通道做为alpha进行装载,默认的为none,表示以红色作为alpha通道。
PF_A8R8G8B8纹理格式,常用的有PF_R5G6B5,PF_A4R4G4B4,PF_A8R8G8B8,PF_X8R8G8B8等。
· anim_texture
与上面的texture对应,是用于活动的纹理层,即动态图象。
注意,这里不是使用默认的保存好的.gif动画,而是导入多桢图,设置好桢之间的间隔时间。
这里我们有两种方法。
一种是按照Ogre内部规定对动画的纹理命名:
xxx_0.jpgxxx_1.jpgxxx_2.jpg这样以0为首,加下划线递增命名,这样我们调用时会比较方便,这样便可以了
Anim_texturexxx.jpg32.2 即代表xxx_0.jpg这样命名的纹理有3张,间隔时间为2.2秒。
另一种是非标准的纹理命名,则需要我们如下写:
Anim_texture1.jpgflame2.jpgxxx_3.pnghit4.tga2.2 直接以空格间隔标示逐个标示出每一桢的纹理即可。
注意:
2.2是每桢间的间隔时间,若设置为0,则不会自动进行桢画面切换,需要我们代码中手工控制了。
· cubic_texture
创建一个立方体纹理。
这个一般用于反射映射和天空盒中。
其格式和动态纹理一样,有两种方式,一种是Ogre制定的规范,我们调用就更加简单,如下
Cubic_textureskybox.jpgcombinedUVW
我们仅提供一个基础的纹理名,此时OGRE会默认的去查找skybox_fr.jpg,skybox_bk.jpg,skybox_up.jpg,skybox_dn.jpg,skybox_lf.jpg,skybox_rt.jpg这些纹理。
第二中方式则是按照“前后上下左右”的顺序将这些纹理罗列出来。
最后一个参数需要设置为combinedUVW或separateUV,combinedUVW会将纹理组合到一个立方体纹理映射中,带有UVW三维纹理坐标,适合做反射映射。
而separateUV仅仅保存2D的UV坐标,适用于天空盒。
· tex_coord_set
因为一个Mesh网格允许有多套纹理坐标集,我们在这里设置使用哪套坐标集。
格式为tex_coord_set3(使用编号为3的坐标集)
默认为tex_coord_set0
· tex_address_mode
纹理寻址模式。
即当纹理UV值大于1.0时的纹理处理方法。
参数有以下几种枚举选择:
Wrap 会将所有UV值大于1.0的值设置为0.0,纹理会被重复连续绘制。
Clamp 会将所有UV值大于1.0的值设置为1.0,这样的话就相当于在模糊边界。
Mirror 会当UV值等于1.0的时候,将纹理反转后连续绘制。
Border 超过1.0的UV都会被设置为边界色,就是描边效果。
此项可设置tex_border_colour属性。
· tex_border_colour
和上一属性对应,设置纹理边界色,仅对Border纹理寻址有效。
格式:
tex_border_colourRGBA(0.0–1.0取值)
· filtering
纹理过滤形式:
我们可以使用其预定的四种基本类型,包括
None 不进行纹理过滤
Bilinear 进行双线性纹理过滤。
就是对mipmap进行挑选过滤,但是不对mipmap各个级别之间进行过滤
Trilinear 进行三线性纹理过滤。
将最近的两个mipmap一起进行过滤。
Anisotropic 各向异性纹理过滤。
使用该项,则你必须设置其max_anisotropy值。
默认为bilinear。
· max_anisotropy
最
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ogre 脚本 完全说明 完全 说明