У меня есть сценарий материала Огр , который определяет 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, которую я использую, скрипт работает следующим образом;
- Камера> 2000: шейдерная техника
- Камера> 1600 <= 2000: Средняя // Здесь выбирается моя техника "текстуры" вместо шейдера </li>
- Камера <= 1600: высокая // </li>
Если я изменю порядок 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
}
... но это безобразно.