Имеет ли RenderMonkey ошибку в отображении потока TEXCOORD для GLSL?
Для ясности начну с моего вопроса:
Можно ли использовать (в коде шейдера) имя настраиваемого атрибута, которое я установил для использования TEXCOORD в (OpenGL) отображении потока в RenderMonkey 1.82, или мне нужно использовать gl_MultiTexCoord0? (Вопрос также может быть действительным для использования в НОРМАЛЬНОЙ форме, т. Е. Произвольное имя или gl_Normal)
Фон:
Использование RenderMonkey версии 1.82. Я успешно использовал отображение потока для отображения общего атрибута вершины "position" (и, возможно, "normal"), но координаты текстуры, похоже, не передаются правильно. Для кода шейдера я использую #version 330 и квалификатор "in" в GLSL, что должно быть в порядке, поскольку RM не компилирует сами шейдеры (драйвер OpenGL делает).
Я пробовал оба файла.obj и.3ds (экспортированные из blender), и при проверке.obj-файла wavefront есть вся информация о координатах текстуры, а также положения вершин и нормали.
Если это невозможно, отображение потока нарушается, и нет смысла присваивать имена переменным в редакторе отображения потока (кроме работающего потока позиции вершины), поскольку в любом случае необходимо использовать встроенные переменные.
Обновление: при использовании устаревших встроенных переменных необходимо использовать режим совместимости в шейдере, например:
#version 330 compatibility
out vec2 vTexCoord;
и в основной функции:
vTexCoord = vec2(gl_MultiTexCoord0);
(Теперь я не уверен насчет отображения нормалей в потоке. Как только у меня заработали координаты текстуры, у меня возникли проблемы с нормой, и мне пришлось вернуться к gl_Normal.)
Вот изображение рабочего решения, но со встроенными переменными (и да, закомментированная переменная texcoord на рисунке не имеет того же имени, что и в диалоговом окне отображения потока, но у меня было то же имя, когда я пытался использовать это, так что все в порядке.)
2 ответа
Вы можете попробовать использовать общие атрибуты вершин, см. http://open.gl/, это отличный учебник;) (но я думаю, что это означает, что вам придется переписать код, чтобы вручную обрабатывать преобразования...)
#version 330
layout(location = 0) in vec3 bla_bla_bla_Vertex;
layout(location = 2) in vec3 bla_bla_bla_Normal;
layout(location = 8) in vec3 bla_bla_bla_TexCoord0;
Это рабочее решение для RM 1,82