GLSL 2D旋转不起作用

时间:2012-02-17 01:22:33

标签: android opengl-es glsl opengl-es-2.0

我想渲染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

显然存在一个问题,因为它应该是一个简单的2D旋转。如果我做了90度,图像就会完全消失。

使用适用于Android的OpenGL-ES 2完成。

我很感激任何答案。

编辑:我也尝试了同样的问题:

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 个答案:

答案 0 :(得分:2)

我在矢量之后将矩阵相乘......错误的方法。矩阵在完成时起作用:

gl_Position = RotationMatrix * Position;