Недавно я начал собирать OpenGL ES 1.1 / 2.0 2D конвейер с нуля (только для iPhone).Этот конвейер предназначен для использования инженерами, не имеющими опыта работы с 3D-математикой.
Закомментированы матрицы вращения по осям X и Y, которые дают точные результаты, которые они должны .Матрица вращения Z, похоже, ничего не делает.
VERTEX SHADER
//THESE WORK
/*
highp mat4 rotationMatrix = mat4(1.0, 0.0, 0.0, 0.0,
0.0, cos(angle), -sin(angle), 0.0,
0.0, sin(angle), cos(angle), 0.0,
0.0, 0.0, 0.0, 1.0);
highp mat4 rotationMatrix = mat4(cos(angle), 0.0, sin(angle), 0.0,
0.0, 1.0, 0.0, 0.0,
-sin(angle), 0.0, cos(angle), 0.0,
0.0, 0.0, 0.0, 1.0);
*/
//THIS DOESN'T WORK >:(
highp mat4 rotationMatrix = mat4(cos(angle), -sin(angle), 0.0, 0.0,
sin(angle), cos(angle), 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
gl_Position = a_position;
gl_Position *= rotationMatrix;
Поскольку это будет для 2D-рендеринга и будет передано инженерам без 3D-опыта, я бы предпочелчтобы избежать передачи в матрицу MVP и просто нажать базовые переменные масштаба, поворота и перевода (и пропустить написание частичной матрицы lib в 10-й раз).
Прошло много времени с тех пор, как я запутался сМатематическая математика и шейдеры, так что я надеюсь, что это небольшая ошибка.
Спасибо за вашу помощь!
РЕДАКТИРОВАНИЕ / ОБНОВЛЕНИЕ:
Я обнаружил, что постобработкаПроход загонял угол.
Теперь я обнаружил, что Z-вращение, кажется, масштабирует квад.Я помню, что это была проблема с n00b, и я смотрю на нее ...
Я забыл упомянуть, что у меня есть дешевая временная матрица проекции
//s_scalefactor is for retina vs non-retina display
highp mat4 projectionMatrix = mat4( 2.0/(320.0 * s_scalefactor), 0.0, 0.0, -1.0,
0.0, 2.0/(480.0 * s_scalefactor), 0.0, -1.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
gl_Position *= projectionMatrix;
Это дешевый хак, но яне уверен, что это приведет к жесткому повороту Z.
РЕДАКТИРОВАТЬ # 2:
Я также нигде не пытался использовать усеченную фигуру вместо орто и вычислять матрицу вне шейдера.