【问题标题】:Rotation in OpenGL ES 2.0OpenGL ES 2.0 中的旋转
【发布时间】:2013-05-19 08:19:24
【问题描述】:

我有一个 2x4 矩阵。代表正方形的4个点。我需要将所述正方形旋转 x 弧度(显然可以转换为度数),旋转点/锚点是正方形的中心。

由于 OpenGL ES 2.0 删除了转换函数(glPush/glPop、glRotate、glTranslate、glScale 等),我需要自己进行旋转。有人可以帮我写一个函数来执行旋转吗?

【问题讨论】:

    标签: c++ ios c opengl-es opengl-es-2.0


    【解决方案1】:

    2D 中的旋转可以表示为(其中theta 以弧度为单位):

    cs = cos(theta);
    sn = sin(theta);
    
    out.x = in.x * cs - in.y * sn;
    out.y = in.x * sn + in.y * cs;
    

    上述线性方程可以表示为一个2x2矩阵(美式,按列排列):

    |  cs  sn |
    | -sn  cs |
    

    矩阵可以扩展以添加翻译:

    |  cs  sn  tx |
    | -sn  cs  ty |
    |   0   0  1  |
    

    在 OpengGLES 2.0 中,您可能会将这 4 个点打包为一个包含两个组件的数组,您需要在 顶点着色器 中对它们进行转换。您计算上述矩阵并使用制服将其发送到管道中。

    如果您不了解 OpenGL ES 2.0 管道,这可能会变得很长。您需要更多信息吗?

    【讨论】:

    • 哈哈,是的,我对 OpenGL 引擎盖下的实际事物有一个非常基本的了解。据我了解,OpenGL ES 管道更加疯狂。我什至没有使用自定义着色器顺便说一句,所以如果我可以在不使用 GLSL 的情况下做到这一点,我会是一个非常快乐的露营者。
    • OpenGL ES 2.0 中没有固定的管道,您需要使用 GLSL。我为您找到了这个:khronos.org/assets/uploads/books/… 这是一个简单的开始,您需要更改顶点着色器以添加仿射变换,但这相对容易。
    • 那么在着色器中没有自定义代码就无法进行旋转?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多