在OpenGL ES 2.0中缩放和旋转

时间:2011-05-04 09:33:01

标签: opengl-es-2.0 shader

有没有办法在不使用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 个答案:

答案 0 :(得分:2)

在渲染对象的几何体中包含纵横比修复?我在我的字体渲染工具中这样做,每个矩形中的顶点位置由屏幕的纵横比校正,是的我知道它更好更容易使用矩阵修复但我在编写此工具时不知道它,它工作正常:))

答案 1 :(得分:0)

您可以手动将GluPerspective的代码翻译为着色器: http://www.opengl.org/wiki/GluPerspective_code

但是为每个顶点计算这个矩阵效率不高。因此,您可以为设备屏幕手动计算它。查看these个帖子

答案 2 :(得分:0)

只需更改旋转的矩阵乘法顺序:

a_pos.xy = rotZ * a_position.xy;