GLSL 2D Rotation не работает - PullRequest
5 голосов
/ 17 февраля 2012

Я хочу визуализировать 2D-изображения. Для этого я масштабирую и трансформирую все в положение с центром, где я хочу этого. Мне нужно повернуть 2D-координаты вокруг центра, но когда я делаю это, это как если бы была некоторая x-координата, так как изображения странно расплющиваются. Вот код:

attribute vec4 vPosition;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
uniform vec2 scale;
uniform vec2 trans;
uniform float move_down;
void main(){ 
    gl_Position = vPosition;
    gl_Position.x *= scale.x;
    gl_Position.y *= scale.y;
    gl_Position.x += trans.x;
    gl_Position.y += trans.y - move_down;
    gl_Position.x *= 2.0;
    gl_Position.y *= 2.0;
    gl_Position.x -= 1.0;
    gl_Position.y -= 1.0;
    gl_Position.x *= 0.2; //For visual testing only
    gl_Position.y *= 0.2; //Same
    gl_Position.x = cos(1.0)*gl_Position.x - sin(1.0)*gl_Position.y;
    gl_Position.y = sin(1.0)*gl_Position.x + cos(1.0)*gl_Position.y;
    v_texCoord = a_texCoord;
}

Вот изображение без линий вращения ...

Images are cropped down

А вот изображение с вращением на 1,0 радиан ...

enter image description here

Очевидно, что есть проблема, так как это должно быть простое двухмерное вращение. Если я поверну на 90 градусов, изображение полностью исчезнет.

Готово с OpenGL-ES 2 для Android.

Я ценю любые ответы на это.

Редактировать: я тоже пробовал это с той же проблемой:

mat4 RotationMatrix = mat4( cos(1.0), -sin(1.0), 0.0, 0.0,
                               sin(1.0),  cos(1.0), 0.0, 0.0,
                               0.0,           0.0, 1.0, 0.0,
                               0.0,           0.0, 0.0, 1.0 );
    gl_Position *= RotationMatrix;

1 Ответ

3 голосов
/ 17 февраля 2012

Я умножал матрицу после вектора ... Неправильно. Матрица работает, когда это сделано как:

gl_Position = RotationMatrix * Position;
...