2014-06-16 3 views
0

Я использую OpenGLES20 с Android, и я хотел бы знать, как сделать следующее:OpenGL андроид 2D матрица проекции

Я думаю, что легче объяснить с изображением ...

enter image description here

Как исправить это растяжение. Примечание. Я работаю в 2D.

Я слышал, что эта проблема решена с использованием так называемой матрицы проекции. Я также прочитал вопрос StackOverflow, в котором говорится, что документация по настройке проекционной матрицы для Android не является хорошей. Я пробовал это лично и не мог заставить его работать.

+0

Для решения этой проблемы вам даже не нужна матрица проекции. Вы можете просто умножить координаты вершин, чтобы настроить соотношение сторон. Однако, концептуально, это одна из вещей, которую делает проекционная матрица. Эта диаграмма может использовать некоторые работы, хотя - я не уверен, что вы хотите *** изображение справа или нет, и если вы этого не хотите, я не знаю, сколько экрана вам нужен треугольник Занять. Возможно, если вы действительно добавили некоторые координаты вершин, я мог бы лучше понять, что вы пытаетесь сделать. –

+0

@ AndonM.Coleman Извините за двусмысленность, я хочу, чтобы изображение справа было равносторонним треугольником и не растягивалось, как оно есть. В настоящее время я конвертируюсь в координаты экрана, а затем выполняю преобразования, а затем конвертирую обратно в координаты openGL. Но я должен использовать много умножения и деления, которые отстают от моих анимаций. Поэтому я хочу знать, как использовать матрицу проекции и просмотр камеры, чтобы сделать это для меня – Ogen

ответ

0

Этот вопрос очень плохо поставлен. На левом изображении вы имеете прямоугольное представление с системой координат [0,1]x[0,1] и правильно нарисованным треугольником, а справа вы имеете тот же вид с системой координат вида и растянутым треугольником ... Принимая это во внимание 2 вещи, ваши треугольные координаты уже растянуты, чтобы начать с (или есть дополнительная матрица представления модели). Если они не были растянуты, треугольник будет правильно нарисован на правильном изображении.

Это очень распространенная проблема, когда ваша сцена растягивается при работе с различными соотношениями взглядов. В общем, чтобы решить это, вы ищете что-то вроде glOrtho, которое может определить вашу систему координат. Входные параметры для этого метода левые, правые, верхние и нижние, и проще всего использовать координаты экрана (например, представленные на правильном изображении). Другим подходом является нормализация этого ввода либо [0,1]x[0,height/width], либо [0,width/height]x[0,1]. Эти два метода представляют собой «подгонку» и «заполнение», а это зависит от того, насколько ширина изображения меньше или больше, чем высота (портрет, пейзаж).

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

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