У RenderMonkey есть ошибка в сопоставлении потоков TEXCOORD для GLSL?

Для ясности я начинаю с вопроса:

Можно ли использовать (в шейдерном коде) имя настраиваемого атрибута, которое я установил для использования TEXCOORD в сопоставлении потоков OpenGL в RenderMonkey 1.82 или мне нужно использовать gl_MultiTexCoord0? (Вопрос может быть действительным для НОРМАЛЬНОГО использования, например, пользовательского имени или gl_Normal)

Фон:

Использование RenderMonkey версии 1.82. Я успешно использовал отображение потока для сопоставления общего атрибута вершины "позиция" (и, возможно, "нормального" ), но координаты текстуры, похоже, не перенаправлены правильно. Для шейдерного кода я использую #version 330 и "in" в GLSL, что должно быть ОК, поскольку RM не компилирует сами шейдеры (драйвер OpenGL).

Я пробовал файлы .obj и .3ds (экспортируется из блендера), а при проверке файла .obj файла wavefront присутствует вся информация о координатах текстуры, а также положения вершин и нормали.

Если это невозможно, отображение потока нарушается, и нет смысла указывать переменные в редакторе сопоставления потоков (кроме того, для потока позиции вершин, который работает), так как нужно использовать встроенные переменные в любом случае.

Обновление: Если вы используете устаревшие встроенные переменные, нужно использовать режим совместимости в шейдере, например,

#version 330 compatibility
out vec2 vTexCoord;

и в основной функции:

vTexCoord = vec2(gl_MultiTexCoord0);

(Теперь я не уверен в отношении отображения потоков нормалей. Как только я получил координаты текстуры, у меня были нормальные проблемы и мне пришлось вернуться к gl_Normal.)

Вот изображение рабочего решения, но со встроенными переменными (и да, прокомментированная переменная texcoord на картинке не имеет того же имени, что и в диалоговом окне сопоставления потоков, но имеет одно и то же имя, когда я попытался использовать его, так что все в порядке.): Stream mapping bypassed with built in variables

Ответ 1

Вы можете попробовать использовать общие атрибуты вершин, см. http://open.gl, это отличный учебник;) (но я думаю, это подразумевает, что вам придется переписать код для ручного управления преобразованиями...)

Ответ 2

#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