我有一个定义 4 种渲染技术的Ogre材质脚本。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 版本的机器上,脚本的行为如下;
- Camera > 2000 : 着色器技术
- Camera >1600 <= 2000 : Medium // 这里选择我的“纹理”技术而不是着色器
- 相机 <= 1600 : 高 //
如果我将着色器技术中的 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
}
......但它很丑陋。