Я создал базовый ортографический шейдер, который отображает спрайты из текстур. Отлично работает.
Я добавил коэффициент масштабирования, чтобы спрайт масштабировался, становясь больше или меньше. Предполагая, что текстура привязана к источнику в «левом нижнем углу», она сжимается к этой исходной точке или расширяется от нее к верхнему правому углу. То, что я на самом деле хочу, это уменьшить или расширить «на месте», чтобы оставаться в центре.
Итак, один из способов достижения этого - определить, сколько пикселей я сожму или увеличу и компенсирую. Я не совсем уверен, как бы я это сделал, и я также знаю , что это не лучший способ. Я дурачился с порядком своих переводов и масштабированием, думая, что могу сначала масштабировать, а затем размещать, но я просто получаю различные плохие результаты. Я не могу обернуться, чтобы решить проблему.
Вот мой шейдер:
// Set up orthographic projection (960 x 640)
mat4 projectionMatrix = mat4( 2.0/960.0, 0.0, 0.0, -1.0,
0.0, 2.0/640.0, 0.0, -1.0,
0.0, 0.0, -1.0, 0.0,
0.0, 0.0, 0.0, 1.0);
void main()
{
// Set position
gl_Position = a_position;
// Translate by the uniforms for offsetting
gl_Position.x += translateX;
gl_Position.y += translateY;
// Apply our (pre-computed) zoom factor to the X and Y of our matrix
projectionMatrix[0][0] *= zoomFactorX;
projectionMatrix[1][1] *= zoomFactorY;
// Translate
gl_Position *= projectionMatrix;
// Pass right along to the frag shader
v_texCoord = a_texCoord;
}