我創建了一個基本的正交着色器,用於顯示紋理中的精靈。它效果很好。正投影中居中縮放效果的着色器有什麼問題?
我已經爲它添加了一個「縮放」因子,以允許精靈變大或變小。假設紋理以「左下角」的原點爲起點,它所做的是朝着原點收縮,或者從原點向右上方擴展。我真正想要的是縮小或擴大「到位」以保持中心。
因此,實現這一目標的一種方法是弄清楚我將縮小或擴展多少像素,並進行補償。我不太確定我會怎麼做,我也知道這不是最好的方式。我愚弄我的翻譯和規模的順序,認爲我可以先縮放然後放置,但我得到各種不好的結果。我無法用頭來解決問題。
這裏是我的着色器:
// 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;
}