#opengl-es-2.0 #shader
#opengl-es-2.0 #шейдер
Вопрос:
Есть ли способ включить коррекцию соотношения сторон без использования матриц в OpenGL ES?
Я пишу простой шейдер для поворота текстуры.
void main()
{
mat2 rotX = mat2(cosA, sinA, -sinA, cosA);
vec4 a_pos = a_position;
a_pos.xy = a_position.xy * rotZ;
gl_Position = a_pos;
}
Но проблема в том, что изображение искажается при вращении.
В обычном OpenGL мы используем что-то вроде gluPerspective(fov, (float)windowWidth/(float)windowHeight, zNear, zFar);
Как мне сделать то же самое с шейдерами?
Примечание: Я бы предпочел не использовать матрицу.
Ответ №1:
Включить исправление соотношения сторон в геометрию визуализируемого объекта? Я сделал это в своем инструменте для рендеринга шрифтов, положение вершин в каждом прямоугольнике корректируется соотношением сторон экрана, и да, я знаю, что лучше и проще использовать исправление матрицы, но я не знал этого, когда писал этот инструмент, и он отлично работает 🙂
Ответ №2:
Вы можете вручную перевести код gluPerspective в shader:http://www.opengl.org/wiki/GluPerspective_code
Но вычислять эту матрицу для каждой вершины неэффективно. Таким образом, вы можете вручную рассчитать его для экрана вашего устройства. Посмотрите на эти сообщения
Ответ №3:
Просто измените порядок умножения матрицы для поворота:
a_pos.xy = rotZ * a_position.xy;