То, что вы на самом деле изменяете в своем фрагменте кода, это позиция Y ваших вершин ... это, безусловно, не то, что вы хотите сделать.
a_position - ваша позиция в пространстве модели; система координат, которая центрирована вокруг вашего четырехугольника (я предполагаю, что вы используете четырехугольник для отображения текстуры).
Если вместо этого вы внесете изменения в экранное пространство, вы сможете перемещать изображение вверх и вниз и т. Д., Поэтому измените значение gl_Position:
((u_projectionMatrix * u_modelViewMatrix) * pos + Vec4(0,HEIGHT,0,0))
Обратите внимание, что тогда вы будете в пространстве экрана; так что проверьте размеры вашего окна просмотра.
Наконец, лучший способ добиться желаемого эффекта - использовать поворотную матрицу для переворачивания и наклона изображения.
Затем вы должны объединить эту матрицу с поворотом вашего изображения (объединить его с матрицей просмотра модели).
Вы можете либо умножить матрицы моделей на проекцию вида на ЦП:
original_mdl_mat = ...;
rotated_mdl_mat = Matrix.CreateTranslation(0, -image.Height, 0) * Matrix.CreateRotationY(180) * original_mdl_mat;
mvm_original_mat = Projection * View * original_mdl_mat;
mvm_rotated_mat = Projection * View * rotated_mdl_mat;
или на графическом процессоре:
uniform highp mat4 u_model;
uniform highp mat4 u_viewMatrix;
uniform highp mat4 u_projectionMatrix;
gl_Position = (u_projectionMatrix * u_model * u_viewMatrix) * pos;