實體(Entity)
一個實體是情境裡一個可移動的物體的具體執行個體。唯一的假設是它在世界空間裡沒有一個固定的位置
。
實體必須串連到一個結點上才真正成為情境的一部分。
當一個實體被載入後,一系列預定義的材質也一齊被載入。
一個網格可能不僅僅只用一種材質。網格的不同部分可以使用不同的材質。
一個網格對象實際上包含著幾個子網格對象(根據它所包含的材質數目)。如果一個網格只有一種材
質可用,那麼它就只有一個子網格對象。可以使用Entity::getSubEntity()來獲得子網格的引用,然
後使用該引用調用setMaterialName()來改變材質。
材質(Material)
Ogre預設的材質類型為:
對環境光線顏色的反射:ColourValue::White(full);全部反射出去
對漫反射光的反射:ColourValue::White(full)
對鏡面光的反射:ColourValue::Black(none);不發生鏡面反射
shininess: 0
沒有紋理層.
混合參數:SourceBlendFactor = SBF_ONE, DestBlendFactor = SBF_ZERO
深度測試開啟.
深度緩衝寫入開啟.
深度測試比較函數:CMPF_LESS_EQUAL
消除模式:CULL_CLOCKWISE 順時針
全域環境光線:ColourValue(0.5, 0.5, 0.5)
動態光照計算:開啟
高斯著色模式.
雙線性紋理過濾.
技術(Technique)
編譯器會對其檢查的幾項主要為:
1.在每個pass裡的紋理單元數目.注意到,如果紋理單元的數目超過了顯卡晶片的最大支援數,該
technique可以仍被使用,直到一個頂點shader被使用.在這種情況下,ogre將會捨棄掉那個擁有太多
passes entries的pass,然後將物件多重材質透明混色(multitexture)變成多pass混合(multipass)來處理.
2.是否啟用了紋理技術.如果啟用的話,使用的是哪一種語言.
3.其它的像立方體映射以及dot3混合等效果.
注意,在一個材質指令碼中,technique 的順序必須按照使用優先順序按順序來寫.換句話說,排在越前面的
technique比排在後面的technique更優先被選擇.這意味著通常把最進階的, 對顯卡最具挑戰性的
technique放在最前面,把一些對顯卡要求比較低的technique放在後面.
technique僅擁有一項屬於它們自已的屬性,那就是LOD層級. 預設地,technique有層級0(最進階別).
可以指定多個technique使用同一個層級,OGRE將自動挑選最好的technique(通常是按照哪個technique
排在前面來選擇). 一般來說,可以這樣來決定technique順序:先按LOD層級, LOD層級相同的再按優先
權來排序. 具體使用哪個層級的LOD,是由material的lod_distance來間接決定的. technique的LOD數
目必須與material指定的距離數目相同.如lod_distance指定了100, 1000, 3000三個層級的最小距離,
那麼也應該有相應的0,1,2三個lod層級.
如:
lod_distance 500 1000 1400
這樣,lod_index 0 對應 0~500, lod_index 1 對應 500~1000, lod_index 2 對應 1000~1500
一個technique可以有0~16個pass.
通道(pass):
在一個通道裡可以指定的屬性有:
ambient;
diffuse;
specular;
emissive;
scene blend; //混合操作
depth check;
depth write;
depth func;
depth bias;
cull hardware;
cull software;
lighting;
shading model;
fog override;
colour write;
max lights;
iteration;
各種屬性的描述如下:
ambient r g b
它決定了在每個頂點對r,g,b的反射程度.這個屬性決定了多少的全域環境光線被反射. 這個屬性在動態
光照被禁用或者啟用紋理層的colour_op_replace顏色替換選項時無效.
diffuse r, g, b
它決定了在每個頂點對於情境中的燈光的diffuse成分的反射程度.在光照計算禁用或啟用
colour_op_replace紋理層屬性時無效.
emissive r, g, b
設定頂點的自發光顏色.當啟用vertex shader時該屬性無效.當lighting off或colour_op_replace時
也無效.
scene_blend add 或者 scene_blend modulate 或者 scene_blend alpah_blend
或者兩個參數的形式
scene_blend one one
scene_blend src_colour one_minus_src_colour
scene_blend src_alpha one_minus_src_alpha
depth_check on / off
深度測試的開關
depth_write on /off
深度緩衝寫的開關
depth_func func
深度比較函數
alaways_fail, always_pass, less, less_equal, euqal, not_equal, greater_equal, greater
depth_bias
深度位移(可用於像貼花的特效上)
cull_hardware (clockwise/anticlockwise/none)
消除模式
cull_software (back/front/none)
相當於cull_hardware的對應選項
lighting on/off
是否啟用光照.
shading flat/gouraud/phong
著色模式
fog_override true/false [ type colour density start end ]
告訴pass是否忽略情境中的fog設定並強制使用自已的設定. 當你要在有物的情境中放置一個不想被霧
影響的物體,它顯得非常有用.預設為false.
如果設為yes,還可以不一定就受到情境中霧的影響,而是使用自已指定的霧設定.type為計算類型,可以
為none,linear, exp, exp2. colour為霧的顏色,density為濃度,它是為exp與exp2設定的.start, end
是為linear類型的霧設定的.
fog_override true exp 1 1 1 0.002 10000
colour_write on/off
顏色buffer
max_lights 8
最大燈光數
紋理層屬性:
texture
anim_texture
cubic_texture
tex_coord_set
tex_address_mode
filtering
max_anisotropy
colour_op
alpha_rejection
colour_op_ex
colour_op_multipass_fallback
alpha_op_ex
env_map
scroll
scroll_anim
rotate
rotate_anim
scale
wave_xform
屬性描述:
texture <texturename> [<type>]
其中,texturename檔案名稱中不能包含有空格.type 可以用 1d, 2d, cubic 來指示是幾維的紋理(預設
為2維).
1d的紋理的高度為1像素,而cubic紋理是由6張2D紋理圍成一個長方體購成的.
anim_texture <base_name> <num_frames> <duration>
或
anim_texture <frame1> <frame2> <frame3> ... <frame_n> <duration>
例如,
anim_texture fire.jpg 5 1.3
它建立了一個動畫層,由fire1.jpg,fire2.jpg ... fire5.jpg組成,每張停留1.3秒
anim_texture fire1.jpg fire2.jpg fire3.bmp fire4.png 1.3
它建立了一個四幀的紋理動畫.
cubic_texture <base_name> <combinedUVW / sperateUV>
或者
cubic_texture <front> <back> <left> <right> <up> <down> <combinedUVW / seperateUV>
第一種格式中,六個面的紋理檔案名稱應為這樣:如果base_name為skybox.jpg,那麼應為
skybox_fr.jpg, skybox_bk.jpg, skybox_up.jpg skybox_dn.jpg skybox_lf.jpg skybox_rt.jpg 六
張。
combinedUVW指的是六張紋理串連到一個單一的cubic紋理圖上,定址模式為3D座標UVW。
seperateUV指的是六張紋理仍保持分離並仍為2D紋理。使用的是2D紋理貼圖
tex_coord_set <set_num>
設定該紋理層使用的座標系統.
tex_address_mode <wrap/clamp/mirror>
filtering <none/bilinear/trilinear/anisotropic>
設定紋理過濾模式.
filtering <minification> <magnification> <mip>
max_anisotropy <max>
設定最大異向性過濾值
colour_op <replace/add/modulate/alpha_blend>
設定顏色混合操作
alpha_rejection <function> <value>
阻塞滿足條件的圖素
colour_op_ex <operation> <source1> <source2> [<manual_factor>] [<manual_colour1>]
[<manual_colour2>]
其中operation的選項如下:
source1:直接使用選項1.
source2: 直接使用選項2.
modulate: s1 * s2
modulate_x2: (s1 * s2) * 2
modulate_x4: (s1 * s2) * 4
add: s1 + s2;
add_signed: (s1 + s2) - 0.5
add_smooth: (s1 + s2) - s1 * s2
subtract: s1 - s2
blend_diffuse_alpha: s1 * alpha1 + s2 * (1-alpha2)
blend_texture_alpha: s1 * alpha1 + s2 * (1-alpha2)
粒子系統屬性:
quota <max_particles>
最大粒子數。
material <material_name>
粒子材質。
particle_width <width>
粒子寬度
particle_height <height>
粒子高度
cull_each <true/false>
所有粒子系統都是通過一個邊界盒被剔除的。該邊界盒內包含著所有的粒子。這對於大多數情況下很
有效。在大多數粒子系統中,大多數粒子不是同時可見就是同時不可見。然而,對於一些特殊的粒子
系統,其覆蓋的範圍比較廣,可能“難以”用邊界盒來剔除(如雨滴),這時可能需要對其一個一個
剔除。這時,cull_each true就有效了。
billboard_type <point/oriented_common/oriented_self>
point:預設的設定,它使粒子始終面向攝像機。
oriented_common: 粒子繞著一個特定的固定的向量旋轉。即在X,Z方向上它是“廣告板”, 但Y方向
上不是。
oriented_self:粒子繞著一個自訂的它們的特定方向。如雷射,火花等...
粒子發射器的屬性:
angle
colour
colour_range_start
colour_range_end
direction
emission_rate
position
velocity
velocity_min
velocity_max
time_to_live
time_to_live_min
time_to_live_max
angle <degree>
以角度為單位設定發射器在其方向上發射粒子的角度範圍。為0時粒子只朝正前方發射。180則為一個
圓周。
colour <r> <g> <b> [<a>]
設定粒子顏色,範圍在[0,1]內。
colour_range_start <r> <g> <b>
colour_range_end <r> <g> <b>
emission_rate <rate>
position <x> <y> <z>
velocity <world_units_per_second>
velocity_min <vel>
velocity_max <vel>
time_to_live_min <num_seconds>
time_to_live_max <num_seconds>
common_direction <x> <y> <z>
OGRE預設了幾種粒子發射器:點型,方體型,圓柱型,橢圓,洞,環形
emitter Point
{
//settings go here
}
立方體型:
width <value>
height <value>
depth <value>
在這個立體方體內的任一位置發射
emitter Box
{
//..
}
圓柱形,橢圓等發射器同上。
影響器:
Linear Force Affector
force_vector <x> <y> <z>
設定一個力以對粒子發生影響。
force_application <add/average>
add:當前的外力加上原來粒子的運動。
average:當前的外力與原來粒子的運動的平均.
Affector LinearForce
{
//...
}
顏色影響器
red <delta_value>
green <delta_value>
blue <delta_value>
alpha <delta_a>
Affector ColourFader
{
//...
}
// 尺寸影響器
rate ...
Affactor scaler
{
//settngs go here.
}
GuiElement屬性群組
metrics_mode <pixels / relative>
選擇尺寸模式,pixel為像素模式, relative 為相對模式0~1
horz_align <left/center/right>
水平對齊模式
vert_align <top/center/bottom>
垂直對齊模式
left <value>
value的模式為相對(relative)模式,意味著0.5為父物件的一半寬度
top <value>
同上.
width <value>
height <value>
也是相對寬度
material <name>
指定材質
caption <string>
標題項.
標準GUI元素
Panel(容器)
面板元素.它是一個可以容納其他元素的矩形地區.它可以有,也可以沒有背景.背景材質的定義是通過
material屬性來決定的,但只有在transparent屬性關閉時才出現.
Panel的幾樣屬性如下:
transparent <true/false>
設定是否透明.如果透明,它將不顯示,僅作為一個父級元素存在(可以容納其它元素).
tiling <layer> <x_tile> <y_tile>
設定目標紋理層紋理在該面板上的XY方向上的重覆次數.
BorderPanel(容器)
它是Panel的一個增強版.有了三圍外觀(實際上繪製了9個矩形,中間為主材質,其餘邊角8 個,四個邊,
四個角用的邊界材質).
border_size <left> <right> <top> <bottom>
//設定左右上下各個邊緣的寬度大小
border_material <name>
設定邊緣使用的材質
border_topleft_uv <u1> <v1> <u2> <u2>
border_topright_uv <u1> <v1> <u2> <u2>
border_bottomleft_uv <u1> <v1> <u2> <u2>
border_bottomright_uv <u1> <v1> <u2> <u2>
設定四個角(矩形)材質紋理座標,左上方與右下角兩組.
border_left_uv <u1> <v1> <u2> <u2>
border_right_uv <u1> <v1> <u2> <u2>
border_top_uv <u1> <v1> <u2> <u2>
border_bottom_uv <u1> <v1> <u2> <u2>
設定四個邊緣(矩形)的材質紋理座標,左上方與右下角兩組.
TextArea(元素)
屬性:
font_name <name>
指定字型名,該字型名必須在一個 .fontdef 檔案中被定義.
char_height <height>
高度
colour <red> <green> <blue>
字元顏色
colour_bottom <red> <green> <blue>
colour_top <red> <green> <blue>
建立從底到頂的具有漸層效果的文字
TextBox(元素)
可以接受使用者輸入的輸入框.它由一個text_area與back_panel組成.
text_area <template name> [<caption>]
back_panel <template name>
字型
建立字型有兩種方法.
1.自已從繪圖工具裡製作含有字型資料的位元影像.
2.讓OGRE根據truetype字型來製作相應的位元影像.
一般,後者容易得多.建議前期先用後者,一切正常後到後期用前一種方法製作適合自已的字型.
一張字型紋理總是要有一個ALPHA通道,因為它可以建立出一個比較漂亮的邊緣.
使用一張已有的位元影像時,可以使用下列屬性:
type image
這告訴OGRE將使用一張已繪製好的位元影像.
source <filename>
要載入的位元影像名.
glyph <character> <u1> <v1> <u2> <v2>
指出特定字元的紋理座標範圍(即其位置).
讓 OGRE利用現在TRUETYPE字型建立位元影像可以使用下列屬性:
type truetype
告訴OGRE從一種字型產生位元影像
source <ttf file>
字型檔
size <size_in_points>
產生字型的尺寸.注意到這隻影響到它們在紋理中的大小,而不是在螢幕上.
resolution <dpi>
解析度. 正常為72 或 96 .
antialias_colour <true / false>
這是一個可選標誌,預設為false.
網格工具
當為OGRE建立一個動畫模型時,需要注意以下三點.
1.網格中每個頂點的最多受到四根骨骼的權重影響.如果超過的話,OGRE將會選擇最低的設定並重新安
排.
2.所有的頂點都至少必須附著在一根骨骼上.
3.每根骨骼至少要有一個主要畫面格.