Масштабирование и поворот в OpenGL ES 2.0 - PullRequest
2 голосов
/ 04 мая 2011

Есть ли способ включить коррекцию соотношения сторон без использования матриц в 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);
Как мне сделать то же самое с шейдерами?
Примечание: я бы предпочел не использовать матрицу.

Ответы [ 3 ]

2 голосов
/ 05 мая 2011

Включить исправление соотношения сторон в геометрию визуализируемого объекта? Я сделал это в своем инструменте рендеринга шрифтов, положение вершин в каждом прямоугольнике корректируется с помощью соотношения сторон экрана, и да, я знаю, что лучше и проще использовать матричное исправление, но я не знал, когда писал этот инструмент, и это отлично работает :) 1001 *

0 голосов
/ 07 марта 2012

Просто измените порядок умножения матриц для вращения:

a_pos.xy = rotZ * a_position.xy;
0 голосов
/ 09 мая 2011

Вы можете вручную перевести код GluPerspective на шейдер: http://www.opengl.org/wiki/GluPerspective_code

Но неэффективно вычислять эту матрицу для каждой вершины. Таким образом, вы можете вручную рассчитать его для экрана вашего устройства. Посмотрите на эти сообщения

...