【问题标题】:Scale and rotate in OpenGL ES 2.0在 OpenGL ES 2.0 中缩放和旋转
【发布时间】:2011-05-04 09:33:01
【问题描述】:

有没有办法在 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);
我如何对着色器做同样的事情?
注意:我不想使用矩阵。

【问题讨论】:

    标签: opengl-es-2.0 shader


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        只需改变矩阵乘法顺序进行旋转:

        a_pos.xy = rotZ * a_position.xy;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多