【发布时间】: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
我有一个 2x4 矩阵。代表正方形的4个点。我需要将所述正方形旋转 x 弧度(显然可以转换为度数),旋转点/锚点是正方形的中心。
由于 OpenGL ES 2.0 删除了转换函数(glPush/glPop、glRotate、glTranslate、glScale 等),我需要自己进行旋转。有人可以帮我写一个函数来执行旋转吗?
【问题讨论】:
标签: c++ ios c opengl-es opengl-es-2.0
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 管道,这可能会变得很长。您需要更多信息吗?
【讨论】: