2013-03-06 3 views
3

У меня есть координата 3D, которую я хочу преобразовать с помощью матрицы modelVeiw, чтобы получить пространство вида в шейдере GLSL. Точка определена в шейдере и не подвержена трансформациям OpenGL. Есть ли способ сделать что-то вроде gl_ModelViewMatrix * (имя vec3)?Умножьте a vec3 по матрице модели

+0

Почтовый код – GreenGuerilla

+0

Обычно вершинный шейдер имеет значение 'void main() {gl_position = glMatrix * aVertex; } 'где aVertex - это атрибут, а glMatrix - униформа. Оба они могут быть сгенерированы внутри шейдера. Просто сделай это! –

+0

@AkiSuihkonen Когда я запускаю код vec3 tfLightPos = (gl_ModelViewMatrix * lightPos); Я получаю ошибку 0 (8): ошибка C1101: неоднозначная перегруженная функция ссылки «mul (mat4, vec3)» – Abaab

ответ

6

No. gl_ModelViewMatrix - mat4. Вам нужно умножить его на vec4 (с 1 в w).

+0

Спасибо! Я бы проголосовал за это, но я такой noob, у меня нет достаточной репутации ... – Abaab

+1

Содержимое w должно определяться с помощью точки - это регулярная вершина, которая должна быть преобразована, или нормальная (в этом случае w = 0, а также можно умножить vec3 на верхнюю матрицу 3x3 MVM.) –

+1

Вся наша семантика была отрывочной. Я думал, что «координата» является синонимом «точки» и не может означать вектор, но я просто искал его, и я ошибся. Вы используете «точку» для обозначения «точки» или «вектора/направления», что также неверно. Вы не должны технически выполнять mat3 (MVM) * normal; вы должны сделать нормальный * inverseOfMVM. http://en.wikibooks.org/wiki/GLSL_Programming/Applying_Matrix_Transformations#Transforming_Normal_Vectors – Jessy

 Смежные вопросы

  • Нет связанных вопросов^_^