Вопрос this Я спросил, как создать «зеркальную» текстуру, и теперь я хочу переместить это «зеркальное» изображение вниз по оси Y относительно высоты изображения. я пытался что-то подобное с различными значениями высоты, но я не могу найти правильное решение:GLSL Shader - Как рассчитать высоту текстуры?
// Vertex Shader
uniform highp mat4 u_modelViewMatrix;
uniform highp mat4 u_projectionMatrix;
attribute highp vec4 a_position;
attribute lowp vec4 a_color;
attribute highp vec2 a_texcoord;
varying lowp vec4 v_color;
varying highp vec2 v_texCoord;
void main()
{
highp vec4 pos = a_position;
pos.y = pos.y - HEIGHT;
gl_Position = (u_projectionMatrix * u_modelViewMatrix) * pos;
v_color = a_color;
v_texCoord = vec2(a_texcoord.x, 1.0 - a_texcoord.y);
}
но еще мне нужно найти способ расчета Значение HEIGHT, как упоминал Томми. Я попробовал его с матрицей вращения, но как убедиться, что повернутое изображение всегда прямо под исходным изображением? – seveves
Для высоты вы можете пройти в форме и сделать HEIGHT/viewport_height. Однако лучший способ - сделать эту сторону ЦП с матрицей. Чтобы убедиться, что это всегда правильно, вы можете сделать что-то подобное в коде CPP/ObjC: original_mdl_mat = ...; rotated_mdl_mat = Matrix.CreateTranslation (0, -image.Height, 0) * Matrix.CreateRotationY (180) * original_mdl_mat; Затем передайте original_mdl_mat в свой шейдер Vertex, чтобы отобразить нормальное изображение, и rotated_mdl_mat, чтобы отобразить повернутый. Примечание: здесь я использую нотацию DirectX/XNA, но вы можете адаптировать ее для OpenGL-ES. –
Проблема в том, что я не влияю на происходящее на процессоре, потому что im программирует на интерфейс, который позволяет изменять шейдеры, а интерфейс не обеспечивает модель, просмотр и проекцию отдельно. У меня есть только доступ к модели в сочетании с матрицей вида и матрицей проецирования. Другая матрица, предоставляемая интерфейсом, является нормальной матрицей. – seveves