2016-05-31 2 views
1

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

This video показывает, что модель постоянно вращается вокруг оси y как попытка четко отобразить мою проблему. Я уверен, что загруженная модель OBJ действительна. Текстура лавы была привязана к модели, чтобы было легче ее видеть.

Видео также показывает консоль, отображающую текущую матрицу, которую я отправляю в мой вершинный шейдер. В памяти, матрица выражается в строке-мажорных порядке, так что следующая матрица:

|1 0 0 0 | 
|0 1 0 0 | 
|0 0 1 10| 
|0 0 0 1 | 

отправляется в моей вершинного шейдера в виде следующего массива C++ парит:

{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 10, 0, 0, 0, 1} 

Я считаю, что я я делаю новичковую ошибку в своей математике. Есть ли очевидная ошибка, которая может быть замечена только от просмотра модели в одиночку? В моей вершинного шейдера (GLSL), я использую следующую строку кода:

gl_Position = mvp * vec4(position, 1.0); 

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

+0

Используете ли вы флаг 'traspose' при отправке своей матрицы строк? – BeyelerStudios

+0

Я этого не делал, и модель стала невидимой, потому что значение «10» в моем примере было бы в четвертой строке, а не в четвертом столбце, что противоречит порядку OpenGL, если я правильно помню. – Harrand

+0

Нет, это просто означает, что ваши данные не находятся внутри куба блока в пространстве клипов и обрезаются – BeyelerStudios

ответ

1

Необходимая транспозиция результирующей матрицы. Раньше не решал проблему, потому что позиция превысила дальний клип по умолчанию, поэтому модель была обрезана.

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