У меня матрица 2х4. которые представляют 4 точки квадрата. Мне нужно повернуть указанный квадрат на x радианов (которые, очевидно, можно преобразовать в градусы), при этом точка поворота / якорь является центром квадрата.
Так как OpenGL ES 2.0 удалил функции преобразования (glPush / glPop, glRotate, glTranslate, glScale и т. Д.), Мне нужно сделать вращение самостоятельно. Может ли кто-нибудь помочь мне написать функцию для предварительного вращения?
Вращения в 2D можно выразить как (где theta
в радианах)
cs = cos(theta);
sn = sin(theta);
out.x = in.x * cs - in.y * sn;
out.y = in.x * sn + in.y * cs;
Приведенные выше линейные уравнения могут быть выражены в виде матрицы 2х2 (по-американски, в столбцах):
| cs sn |
| -sn cs |
Матрица может быть расширена, чтобы добавить также переводы:
| cs sn tx |
| -sn cs ty |
| 0 0 1 |
В OpengGLES 2.0 вы, вероятно, будете упаковывать эти 4 точки в массив из двух компонентов, вам нужно будет преобразовать их в вершинный шейдер. Вы вычисляете вышеприведенную матрицу и отправляете ее по конвейеру, используя униформу.
Это может занять довольно много времени, если вы не знаете конвейер OpenGL ES 2.0. Вам нужна дополнительная информация?
Других решений пока нет …