Ogre材质脚本属性

来源:互联网 发布:朴智妍网络剧重生 编辑:程序博客网 时间:2024/05/01 04:38

顶层Material属性
 
属性名                   值的格式                  描述

lod_distances               <d1> [<d2> ... <dn>]        LOD的距离列表

receive_shadows             <on>|<off>                  阴影是否会投在这个物体上(默认为on) 

transparency_casts_shadows  <on>|<off>                  透明物体是否投射阴影

set_texture_alias           <alias_name> <texture_name> 重命名纹理

Technique 属性
   
属性名                    值的格式         描述

scheme                       <name>            这个technique所属的scheme

lod_index                    <number>          这个technique所使用的LOD层(默认为0)

Pass 属性

属性名                 值的格式                     描述

ambient                  <r> <g> <b> [<a>] |             这个pass的环境光颜色
                         <vertex color>                  (默认为 1.0 1.0 1.0 1.0)

diffuse                  <r> <g> <b> [<a>] |             这个pass的漫反射颜色
                         <vertex color>                  (默认为 1.0 1.0 1.0 1.0)

specular                 <r> <g> <b> [<a>] |             这个pass的镜面颜色
                         <vertex color>                  (默认为 0.0 0.0 0.0 0.0)

emissive                 <r> <g> <b> [<a>] |             这个pass的散射光颜色
                         <vertex color>                  (默认为 0.0 0.0 0.0 0.0)

scene_blend              <add> | <modulate>              pass对场景的混合处理
                         <alpha_blend> | <colour_blend>  默认为不透明,不混合

scene_blend              <src_factor> <dest_factor>      场景混合功能的高级控制,参数值有
                                                         one, zero,dest_colour, src_colour,
                                                         one_minus_dest_colour,
                                                         one_minus_src_colour,
                                                         dest_alpha, src_alpha,
                                                         one_minus_dest_alpha,
                                                         one_minus_src_alpha(默认为zero)
   
depth_check              <on> | <off>                    这个pass是否允许深度缓冲检测
                                                         (默认为on)

depth_write              <on> | <off>                    这个pass是否允许深度缓冲写入
                                                         (默认为on)

depth_func               <func>                          pass使用的深度缓冲检测类型,值有
                                                         always_fail, always_pass,
                                                         less, less_equal, equal,
                                                         not_equal, greater_equal,  
                                                         greater (默认为 less_equal).

depth_bias               <offset>                        深度偏移值(默认为0)

alpha_rejection          <func>                          是否允许alpha-reject,值与上面
                                                         depth_func类似(默认为always_pass)

cull_hardware            <clockwise> | <anticlockwise> | 设置硬件顶点背面剔除的类型
                         <none>                          (默认为 clockwise)                                                            

cull_software            <back> | <front> | <none>       设置基于法线剔除的类型

lighting                 <on> | <off>                    是否允许动态光(默认为 on)

shading                  <flat> | <phong> | <gouraud>    设置动态光模式(默认为 gouraud)

polygon_mode             <solid> | <wireframe> |         设置渲染状态(默认为 solid)
                         <points>
   
fog_override             <true> | <false> [<type>        可以修改雾的设置.类型有none
                         <colour> <density>              linear,exp, exp2; colour
                         <start> <end>                   为RGB颜色值(值在0.0到1.0)
                                                         exp, exp2的density为浮点值
                                                         start和end为linear距离值
                                                         (默认为fog_override false).

colour_write             <on> | <off>                    是否允许颜色写入

max_lights               <number>                        动态光的数量

iteration                <once> | <once_per_light>       哪重光起作用once_per_light
                                                         point,directional,spot
                                                         默认为(once)

iteration                <number> [<per_light>           指示每种光的重复数量
                                                         (默认为1)

point_size               <size>                          点列表里点的尺寸(默认为 1)

point_size_attenuation   <on> | <off>                    点的尺寸石灰根据视觉空间   
                         [constant linear quadratic]     进行衰减(默认为off)

point_size_min           <size>                          衰减后的点的最小值
                                                         (默认为0)

point_size_max           <size>                          衰减后的点的最大值
                                                         (默认为0)

point_sprites            <on> | <off>                    是否允许硬件point-sprite渲染


Texture-Unit 属性

属性名                 值的格式                     描述

texture_alias            <alias>                          纹理的别名(默认为texture_unit名)

texture                  <name> [<type>] [unlimited |     texture_unit的静态纹理名.类型为1d
                         numMipMaps] [alpha]              2d(默认),3d,cubic; numMipMaps 为
                                                          自动生成时的数量(默认为unlimited)
                                                          alpha为装载单个alpha纹理通道

anim_texture             <base_name> <num_frames>         设置动画纹理使用的图象
                         <duration>                       根据 base_name 和 zero-based 索引
                                                          建立 num_frames 个图象.duration为
                                                          动画的长度.决定了纹理动画的FPS
                                                          (默认为不使用纹理动画)

anim_texture             <frame1> <frame2> ...            设置动画纹理的图象.
                         <duration>

cubic_texture            <base_name> <combinedUVW|        设置立方图的图象, base_name为使用
                         separateUV>                      的图象名。combinedUVW使用3D地址的
                                                          硬件立方图.separateUV 使用分离的纹理
                                                          文件的后缀为_fr, _bk, _up, _dn, _lf, _rt
                       
cubic_texture            front> <back> <up> <down>        设置立方图的纹理, separateUV  为上面说的
                         <left> <right>                  

tex_coord_set            <index>                          设置纹理使用的纹理坐标组.(默认为0)

tex_address_mode         <wrap> | <clamp> | <mirror> |    设置纹理寻址方式,默认为wrap
                         <border>

tex_border_colour        <r> <g> <b> [<a>]                定义须寻址模式border的颜色
                                                          (默认为0.0 0.0 0.0 1.0)

filtering                <none> <bilinear> <trilinear>    纹理过滤类型(默认为 anisotropic)

filtering                <minification> <magnification>   高级单位纹理过滤类型.minification
                         <mip>                            或magnification可以设置为point,
                                                          linear, anisotropic. mip 的参数
                                                          为 none, point, linear

max_anisotropy           <degree>                         anisotropy的最大度数(默认为1)
               
colour_op                <replace> | <add> |              纹理的混合类型(默认为 modulate)
                         <modulate> | <alpha_blend>

colour_op_ex             <operation> <source1>            高级纹理混合类型
                         <source2> [<manual_factor>]      operation 的参数为source1, source2,
                         [<manual_colour1>]               modulate,modulate_x2, modulate_x4, add,
                         [<manual_colour2>]               add_signed, add_smooth, subtract,
                                                          blend_diffuse_alpha,blend_texture_alpha,
                                                          blend_current_alpha,blend_manual,
                                                          dotproduct,blend_diffuse_color;
                                                          source1 和 source2 的参数为 src_current
                                                          src_texture, src_diffuse,
                                                          src_specular, src_manual;
                                                          manual_factor 和 manual_colour1 基于
                                                          operation, source1 和 source2的值

colour_op_               <src_factor> <dest_factor>       当multitexturing不能使用的时候
multipass_fallback                                        纹理混合使用的回调方法
                                                          src_factor 和 dest_factor的值
                                                          scene_blend 的类似

alpha_op_ex              (参考 colour_op_ex.)             于colour_op_ex类似但决定的是alpha值
                                                          如何混合.

env_map                  <off> | <spherical> |            允许这个纹理层作为环境贴图.(默认为off)
                         <planar> | cubic_reflection |   
                         cubic_normal
               
scroll                   <x> <y>                          让纹理scroll固定的偏移量

scroll_anim              <x_speed> <y_speed>              设置纹理固定速度的动画scroll

rotate                   <angle>                          设置纹理固定的旋转(逆时针多少度)

wave_xform               <xform_type> <wave_type>         设置纹理的变形.xform_type的参数有
                         <base> <freq> <phase>            scroll_x,croll_y, rotate, scale_x,
                         <amplitude>                      scale_y; wave_type的参数有sine, triangle,                                                          square, sawtooth, inverse_sawtooth
transform                <m00> <m01> . . . <m32> <m33>    给纹理应用一个4X4的变化矩阵      
lod_index                <number>                         这个technique使用的Detail level
                                                          (默认为0)

 

顶层Material属性

属性名

值的格式

描述

lod_distances

<d1> [<d2> ... <dn>]

LOD的距离列表

receive_shadows

<on>|<off>

阴影是否会投在这个物体上(默认为on)

transparency_casts_shadows

<on>|<off>

透明物体是否投射阴影

set_texture_alias

<alias_name> <texture_name>

重命名纹理

Technique 属性

属性名

值的格式

描述

scheme

<name>

这个technique所属的scheme

lod_index

<number>

这个technique所使用的LOD层(默认为0)

Pass属性

属性名

值的格式

描述

ambient

 <r> <g> <b> [<a>] | <vertex color>

这个pass的环境光颜色

(默认为 1.0 1.0 1.0 1.0)

diffuse

<r> <g> <b> [<a>] |

 <vertex color>

这个pass的漫反射颜色

(默认为 1.0 1.0 1.0 1.0)

specular

<r> <g> <b> [<a>] |

<vertex color>

这个pass的镜面颜色

(默认为 1.0 1.0 1.0 1.0)

emissive

<r> <g> <b> [<a>] |

<vertex color>

这个pass的散射光颜色

(默认为 1.0 1.0 1.0 1.0)

scene_blend

<add> | <modulate> |

 <alpha_blend> | <colour_blend>

pass对场景的混合处理

(默认为不透明,不混合()

scene_blend

<src_factor> <dest_factor>

场景混合功能的高级控制,参数值有one,zero,dest_colour,

src_colour, 

one_minus_dest_colour,

one_minus_src_colour, 

 dest_alpha,

src_alpha, one_minus_dest_alpha,  

one_minus_src_alpha

(默认为zero)

depth_check 

 <on> | <off> 

这个pass是否允许深度缓冲检测(默认为on)

depth_write

 <on> | <off>

这个pass是否允许深度缓冲写入(默认为on)

depth_func

<func> 

 pass使用的深度缓冲检测类型,值有always_fail, always_pass, less, less_equal, equal, not_equal, greater_equal, greater

 (默认为 less_equal).

depth_bias

<offset>

深度偏移值

(默认为0)

alpha_rejection

<func>

是否允许alpha-reject,值与上面depth_func类似

(默认为always_pass)

cull_hardware

<clockwise> | <anticlockwise> | <none>

设置硬件顶点背面剔除的类型

 (默认为 clockwise)

cull_software 

<back> | <front> | <none>

设置基于法线剔除的类型

lighting

<on> | <off>

是否允许动态光(默认为 on)

shading

<flat> | <phong> | <gouraud>

设置动态光模式(默认为 gouraud)

polygon_mode 

 <solid> | <wireframe> | <points>

 设置渲染状态(默认为 solid)

fog_override

<true> | <false> [<type><colour> <density><start> <end>]

可以修改雾的设置.类型有linear,exp, exp2;

colour 为RGB颜色值

(值在0.0到1.0)

exp, exp2的density为浮点值

start和end为linear距离值 

 (默认为fog_override false).

colour_write 

<on> | <off>

是否允许颜色写入

max_lights 

<number>

动态光的数量

iteration

<once> | <once_per_light>

哪重光起作用once_per_light

 point,directional,spot

默认为(once)

iteration

<number> [<per_light>

指示每种光的重复数量

(默认为1)

point_size 

<size>

点列表里点的尺寸(默认为 1)

point_size_attenuation

<on> | <off>

[constant linear quadratic] 

点的尺寸石灰根据视觉空间进行衰减(默认为off)

point_size_min

<size>

 衰减后的点的最小值

 (默认为0)

point_size_max

<size>

衰减后的点的最大值

 (默认为0)

point_sprites

<on> | <off>

是否允许硬件point-sprite渲染

Texture_unit属性

属性名

值的格式

描述

texture_alias

<alias>

纹理的别名

(默认为texture_unit名)

texture

 <name> [<type>] [unlimited |numMipMaps] [alpha] [<PixelFormat>]

texture_unit的静态纹理名.类型为1d, 2d(默认),3d,cubic; numMipMaps 为自动生成时的数量(默认为unlimited) alpha为装载单个alpha纹理通道

anim_texture

<base_name> <num_frames><duration>

设置动画纹理使用的图象,根据 base_name 和 zero-based 索引建立 num_frames 个图象.duration为动画的长度.决定了纹理动画的FPS 

 (默认为不使用纹理动画)

anim_texture

<frame1> <frame2> ... <duration>

设置动画纹理的图象.

cubic_texture 

<base_name> <combinedUVW| separateUV>

设置立方图的图象, base_name为使用的图象名。combinedUVW使用3D地址的硬件立方图.separateUV 使用分离的纹理文件的后缀为_fr, _bk, _up, _dn, _lf, _rt

cubic_texture

<front> <back> <up> <down><left> <right> 

设置立方图的纹理, separateUV 为上面说的

tex_coord_set

<index>

  设置纹理使用的纹理坐标组

(默认为0)

tex_address_mode

<wrap> | <clamp> | <mirror> |<border>

设置纹理寻址方式

默认为wrap

tex_border_colour

<r> <g> <b> [<a>]

定义须寻址模式border的颜色

(默认为0.0 0.0 0.0 1.0)

filtering

<none> <bilinear> <trilinear>

纹理过滤类型

(默认为 anisotropic)

filtering

<minification> <magnification><mip> 

高级单位纹理过滤类型.minification或magnification可以设置为point, linear, anisotropic. mip 的参数为 none, point, linear

max_anisotropy 

<degree>

anisotropy的最大度数

(默认为1)

colour_op

<replace> | <add> |<modulate> | <alpha_blend>

纹理的混合类型

(默认为 modulate)

colour_op_ex 

<operation> <source1><source2> [<manual_factor>][<manual_colour1>][<manual_colour2>]

高级纹理混合类型

operation 的参数为source1, source2, modulate,modulate_x2, modulate_x4, add, add_signed, add_smooth, subtract, blend_diffuse_alpha,blend_texture_alpha, blend_current_alpha,blend_manual, dotproduct,blend_diffuse_color; source1 和 source2 的参数为 src_currentsrc_texture, src_diffuse, src_specular, src_manual; manual_factor 和 manual_colour1 基于operation, source1 和 source2的值

colour_op_ multipass_fallback

<src_factor> <dest_factor>

当multitexturing不能使用的时候纹理混合使用的回调方法src_factor 和 dest_factor的值scene_blend 的类似

alpha_op_ex

(参考 colour_op_ex.)

于colour_op_ex类似但决定的是alpha值如何混合.

env_map

<off> | <spherical> |<planar> | cubic_reflection | cubic_normal

允许这个纹理层作为环境贴图.

(默认为off)

scroll 

<x> <y>

让纹理scroll固定的偏移量

scroll_anim

<x_speed> <y_speed>

设置纹理固定速度的动画scroll

rotate

<angle>

设置纹理固定的旋转

(逆时针多少度)

wave_xform

<xform_type> <wave_type><base> <freq> <phase><amplitude>

设置纹理的变形.xform_type的参数有scroll_x,croll_y, rotate, scale_x, scale_y; wave_type的参数有sine,  triangle, square, sawtooth,  inverse_sawtooth

transform

<m01> . . . <m32> <m33>

<m00>    给纹理应用一个4X4的变化矩阵

lod_index

<number>

这个technique使用的Detail level

(默认为0)

 

参考网址:http://blog.csdn.net/pizi0475/archive/2010/03/10/5365220.aspx

Texture_unit详细介绍

texture_unit 纹理单元
我们在PASS渲染通道处已经进行了一次整体的渲染环境设置,然而,在每个纹理单元,我们还可以对单独的纹理进行渲染属性设置。

texture_alias 

设置一个纹理的别名,类似于技术的别名。格式: texture_alias 纹理别名默认该别名就是纹理单元的名字。

 texture 

本层要使用的静态纹理图象名字。可以简单的格式为Texture xxx.jpg (注意:纹理文件名禁止有空格)也可对其属性进行详细的设置。如下Texture xxx.jpg 2d 8 none PF_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.jpg xxx_1.jpg xxx_2.jpg这样以0为首,加下划线递增命名,这样我们调用时会比较方便,这样便可以了
Anim_texturexxx.jpg 3 2.2 即代表xxx_0.jpg这样命名的纹理有3张,间隔时间为2.2秒。
 
另一种是非标准的纹理命名,则需要我们如下写:
Anim_texture1.jpg flame2.jpg xxx_3.png hit4.tga 2.2 直接以空格间隔标示逐个标示出每一桢的纹理即可。
注意:2.2是每桢间的间隔时间,若设置为0,则不会自动进行桢画面切换,需要我们代码中手工控制了。
 
  cubic_texture 
创建一个立方体纹理。这个一般用于反射映射和天空盒中。其格式和动态纹理一样,有两种方式,一种是Ogre制定的规范,我们调用就更加简单,如下
Cubic_textureskybox.jpg combinedUVW
我们仅提供一个基础的纹理名,此时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_set 3 (使用编号为3的坐标集)
默认为 tex_coord_set 0
 
  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_colour RGBA(0.0 – 1.0取值)
 
filtering 
纹理过滤形式:我们可以使用其预定的四种基本类型,包括
None 不进行纹理过滤
Bilinear 进行双线性纹理过滤。就是对mipmap进行挑选过滤,但是不对mipmap各个级别之间进行过滤
Trilinear 进行三线性纹理过滤。将最近的两个mipmap一起进行过滤。
Anisotropic 各向异性纹理过滤。使用该项,则你必须设置其max_anisotropy值。
默认为bilinear。
 
max_anisotropy 
最大各相异性程度偏差值。根据硬件不同一般限制为8或者16
默认为 max_anisotropy 1
 
mipmap_bias 
我们在Pass通道时已经允许设置mipmap纹理Lod运用层级以及适用的距离。在纹理单元这层级我们可以重新对其进行调整。格式为
Mipmap_bias -3 后面的整数代表在所有的范围内强制使用增大或缩小的mip级别。-3代表,在所有范围内强制使用更大3级的mip纹理。
默认是不进行层级偏移:mipmap_bias 0
 
  colour_op 
简单的纹理混合方式,我们可以使用预定义的4项枚举:
Replace 不处理,用当前的纹理直接替换掉后面的所有颜色。覆盖式。
Add 将当前纹理色和后面的渲染颜色进行加法处理。
Modulate 将当前纹理色和后面的渲染颜色进行乘法处理。
Alpha_blend 将当前纹理和后面的纹理进行alpha颜色混合。
默认为 colour_op modulate 当前纹理色和后面颜色进行乘法混合。
 
  colour_op_ex 
高级的纹理混合模式,可以详细的指定混合系数和效果,但个人不推荐使用。效率消耗较大,且受不用的硬件限制性大,使用默认支持的4种混合模式可以了。
 
colour_op_multipass_fallback 
当上面一个colour_op_ex设置要求过高,硬件无法支持多纹理混合时,则不得不调用该项进行多通路混合渲染。若我们使用的是colour_op预设置的4种纹理混合模式,则无需在此处理,OGRE底层已经做了完善的处理。
 
 alpha_op_ex 
同colour_op_ex,不推荐使用。
 
   env_map 
设置环境映射效果。该项可以使用预定义的五个选项
Off 关闭环境映射反射。 默认即本项。
Spherical 开启球面环境映射。 它需要一个单独的纹理,该纹理进行周围反射的记录。
Cubic_reflection开启平面环境映射。
 
 scroll 
静态纹理偏移。 
格式如下:scroll x y 
 
scroll_anim 
动态纹理偏移。 ……针对上一功能的补足。给纹理层一个移动速度进行偏移。
格式为 scroll_anim xspeed yspeed
 
rotate 
以固定角度静态旋转一个纹理。和scroll没什么区别。格式如下 rotate angle
注: angle是逆时针旋转的角度数
 
rotate_anim 
动态旋转一个纹理。 格式为 rotate_anim 3 代表每秒旋转3次360度。
scale 
静态缩放一个纹理。 格式为 scale x_scale y_scale。
wave_xform 
制作类似于水面波纹性质的专用函数。可以制造出一个类似于波状的动态纹理变化形式。
格式: wave_xform <xform_type> <wave_type> <base><frequency> <phase> <amplitude>
示例: wave_xform scale_x sine 1.0 0.2 0.0 5.0
xform_type
scroll_x
变动x滚动值 
scroll_y
变动y滚动值 
rotate
变动旋转值 
scale_x
变动x比例值 
scale_y
变动y比例值 
wave_type
sine

典型的正弦波,在最小值和最大值之间平稳地循环。 
triangle
以恒定的速度增加减少的有角度的波,在极值时立即改变。 
square
最大是波长的一半,最小是瞬时转换之间的停止时间。 
sawtooth
经过一段时间,从最小逐渐持续增加到最大,最后立即回到最小。 
inverse_sawtooth
经过一段时间,从最大逐渐持续减少到最小,最后又立即返回最大。::base 
基值,如果amplitude > 0就是指最小值,amplitdue < 0就是指最大值。 
frequency
波每秒重复的次数,即速度。 
phase
波开始的偏移量。 
amplitude
波的大小。 
波的输出范围在{base, base+amplitude}。所以,以在x方向调整纹理为例,沿正弦波方向从1(标准值)调整到5,即表示每5秒一个周期(每秒0.2个波)。 

transform 
为纹理提供一个4*4矩阵以直接替代上面的旋转,缩放,移动等一系列变化。
格式为 transform m00 m01 m02 m03 m10 m11 m12 m13 m20 m21 m22 m23 m30 m31 m32m33
binding_type 
设置绑定类型。该纹理是绑定到片断处理单元还是顶点处理单元。格式为:
Binding_typefragment / vertex
默认为绑定片断处理单元。
content_type 
设置纹理内容的来源类型。格式为 content_type named / shadow
默认是为named,表示纹理单元图片来源于texture,cubic_texture,anim_texture之一,但个别时候我们需要使用阴影纹理,则此时可以设置为shadow
注: 除去上面的纹理属性设置之外,假若我们需要更高级的纹理属性支持,可以使用外部纹理源。
顶点程序和片断程序声明:
假设我们在材质脚本中需要使用顶点程序或者片段程序,那么,类似于函数声明调用一样,我们必须在调用它之前先对其进行声明定义。
假若调用点都在一个.meterial脚本内还好,我们只需要在调用处的上 面进行声明定义,但假若多个脚本都调用一段顶点程序,我们就需要将这段顶点片断程序独立出任何的.meterial脚本之外,独立编写一个 .program 格式的脚本,在这个脚本中进行定义,这样的话,这个外部定义的顶点片断程序就会顺利的在任何位置上被调用读取。
个人推荐所有的顶点程序都独立为一个脚本,可以更大程度上方便我们整理。
 
顶点程序本身既可以是一些低级语言,例如vs_1_1语法规格写的汇编代码,也可以是HLSL,GLSL,CG,个人更推荐使用后者。
 
一个最基本的片断程序要求有以下几个要点说明:
 vertex_programmyVertexProgram asm
{
   source myVertexProgram.asm 
   syntax vs_1_1
}
1:在头部给出程序名字,之后说明程序类型。“asm”
2:指示出资源来自何处。” source”
3:指示出语法规则。“vs_1_1”
我们可以通过Ogre的GPU管理器来获取当前显卡支持的语法列表。
GpuProgramManager::GetSingleton().getSupportedSyntax()来获得。
一般显卡支持的语法规则如下:
vs_1_1 
这是一种DirectX顶点渲染器汇编语法。 
支持显卡有:ATI Radeon 8500,nVidia GeForce 3。 
vs_2_0 
另一种DirectX顶点渲染器汇编语法。 
支持显卡有:ATI Radeon 9600,nVidia GeForce FX 5系列。 
vs_2_x 
另一种DirectX顶点渲染器汇编语法。 
支持显卡有:ATI Radeon X系列,nVidia GeForce FX 6系列。 
vs_3_0 
另一种DirectX顶点渲染器汇编语法。 
支持显卡有:nVidia GeForce FX 6系列。 
arbvp1 
这是OpenGL标准顶点程序汇编格式。大体上相当于DirectX vs_1_1。 
vp20 
这是一种nVidia特有的OpenGL顶点渲染器语法,是vs 1.1的一个超集。 
vp30 
另一种nVidia特有的OpenGL顶点渲染器语法。它是vs 2.0的一个超集,被nVidia GeForce FX 5系及以上系列支持。 
vp40 
另一种nVidia特有的OpenGL顶点渲染器语法。它是vs 3.0的一个超集,被nVidia GeForce FX 6系及以上系列支持。 
ps_1_1, ps_1_2,ps_1_3 
DirectX像素渲染器(例如片断程序)汇编语法。
支持显卡:ATI Radeon 8500,nVidia GeForce 3。 
注解:对于ATI 8500,9000,9100,9200硬件,也可用于OpenGL。ATI 8500到9200不支持arbfp1但是确实支持OpenGL的atifs扩展,非常类似DirectX的ps_1_4。OGRE有针对atifs编译 器的ps_1_x模块,当在ATI硬件上使用ps_1_x时,它会自动执行。 
ps_1_4 
DirectX像素渲染器(片断程序)汇编语法。
支持显卡有:ATI Radeon 8500,nVidia GeForce FX 5系列。 
注解:对于ATI 8500,9000,9100,9200硬件,此项也可用于OpenGL。ATI 8500到9200不支持arbfp1但是支持OpenGL的atifs扩展,功能上非常类似于DirectX中的ps_1_4。OGRE有针对 atifs编译器的ps_1_x模块,当在ATI硬件上使用ps_1_x时,它会自动执行。 
ps_2_0 
DirectX像素渲染器(片断程序)汇编语法。
支持显卡有:ATI Radeon 9600,nVidia GeForce FX 5系列。 
ps_2_x 
DirectX像素渲染器(片断程序)汇编语法。基本上是带有更多指令的ps_2_0。 
支持显卡有:ATI Radeon X系列,nVidia GeForce FX 6系列。 
ps_3_0 
DirectX像素渲染器(片断程序)汇编语法。
支持显卡有:nVidia GeForce FX 6系列。 
ps_3_x 
DirectX像素渲染器(片断程序)汇编语法。
支持显卡有:nVidia GeForce FX 7系列。 
arbfp1 
这是OpenGL标准片断程序汇编格式。大体上相当于ps_2_0,意味着不是所有支持DirectX下的基本像素渲染器都支持arbfp1(例如GeForce3和GeForce4就都不支持arbfp1,但是它们都支持ps_1_1)。 
fp20 
这是一个 nVidia特有的OpenGL片断程序语法,是ps 1.3的一个超集。它允许你为基本片断程序使用'nvparse'格式。实际上,它使用NV_texture_shader和 NV_register_combiners在GL下提供相当于DirectX's ps_1_1的功能,但是仅限于nVidia显卡。然而,因为ATI显卡比nVidia早一步采用arbfp1,所以它主要用于像GeForce3和 GeForce4系列的nVidia显卡。你可以在http://developer.nvidia.com/object/nvparse.html找 到更多有关nvparse的信息。 
fp30 
另一种nVidia特有的OpenGL片断渲染语法。它是ps 2.0的一个超集,被nVidia GeForce FX 5系列或更高级的显卡支持。 
fp40 
另一种nVidia特有的OpenGL片断渲染语法。它是ps 3.0的一个超集,被nVidia GeForce FX 6系列或更高级的显卡支持。 
 
详细的语法编写,实在没有兴趣详细研究下去了。所以这里略过,我们需要知道的是,除了HLSL,GLSL,CG以外,还有一个Ogre自动识别处理的类型,unified可以统一的对程序定义,这样就可以依赖于渲染系统和硬件支持自动的选择渲染程序.