我有一个Ogre材质脚本,定义了4种渲染技术。 1使用GLSL着色器,然后另外3个只使用不同分辨率的纹理。
我想无条件地使用GLSL着色器,如果显卡支持它,其他3纹理取决于相机距离。
目前我的剧本是;
material foo
{
lod_distances 1600 2000
technique shaders
{
lod_index 0
lod_index 1
lod_index 2
//various passes here
}
technique high_res {
lod_index 0
//various passes here
}
technique medium_res {
lod_index 1
//various passes here
}
technique low_res {
lod_index 2
//various passes here
}
增加索引表示较低的细节级别
您可以(并且经常会)将多种技术分配给相同的LOD索引,这意味着OGRE将选择“在同一LOD索引中列出的最佳技术”。
OGRE确定哪一个是“最好的”,首先列出哪一个。
目前,在支持我正在使用的GLSL版本的机器上,脚本的行为如下:
如果我将着色器技术中的lod顺序更改为
{
lod_index 2
lod_index 1
lod_index 0
}
仅使用最新的lod_index。
如果我将其更改为
lod_index 0 1 2
对我大喊大叫
Compiler error: fewer parameters expected in foo.material(#): lod_index only supports 1 argument
那么如何指定一种技术来拥有3个lod_indexes?
复制工作;
technique shaders
{
lod_index 0
//Shader passes here
}
technique shaders1
{
lod_index 1
//DUPLICATE of shader passses in lod 0
}
technique shaders2
{
lod_index 2
//DUPLICATE of shader passses in lod 0
}
......但它太丑了。
答案 0 :(得分:0)
使用不同技术处理不同LOD值的方法确实是正确的。具有材料LOD使用的完整示例文件将如下所示。
注意:您当然可以更改LOD策略以满足您的需求。所有有效的策略值及其行为都在Ogre手册中进行了解释。
material testLOD
{
lod_strategy screen_ratio_pixel_count
lod_values 0.8 0.6 0.4 0.2
technique red10
{
pass red
{
ambient 0.698039 0.698039 0.698039 1
diffuse 0.698039 0.698039 0.698039 1
specular 0.898039 0.898039 0.898039 1 20
emissive 1 0 0 1
}
}
technique green20
{
lod_index 1
pass green
{
ambient 0.698039 0.698039 0.698039 1
diffuse 0.698039 0.698039 0.698039 1
specular 0.898039 0.898039 0.898039 1 20
emissive 0 1 0 1
}
}
technique cyan100
{
lod_index 2
pass cyan
{
ambient 0.698039 0.698039 0.698039 1
diffuse 0.698039 0.698039 0.698039 1
specular 0.898039 0.898039 0.898039 1 20
emissive 0 0.945098 0.980392 1
}
}
technique blue200
{
lod_index 3
pass blue
{
ambient 0.698039 0.698039 0.698039 1
diffuse 0.698039 0.698039 0.698039 1
specular 0.898039 0.898039 0.898039 1 20
emissive 0 0 1 1
}
}
technique yellow1000
{
lod_index 4
pass yellow
{
ambient 0.698039 0.698039 0.698039 1
diffuse 0.698039 0.698039 0.698039 1
specular 0.898039 0.898039 0.898039 1 20
emissive 1 1 0 1
}
}
}