Por que esse shader de vértice ortográfico não está produzindo a resposta corret

Meu problema é que tenho um par de vértice e shader de fragmento ortográfico (em funcionamento) que me permite especificar o centro X e Y de um sprite através dos uniformes 'translateX' e 'translateY' sendo transmitidos. Multiplico por uma projectionMatrix que é codificada e funciona muito bem. Tudo funciona até a operação ortográfica. Minha geometria de entrada neste shader é baseada em 0, 0, 0 como seu ponto centra

Quero descobrir agora o que esse ponto central (0, 0, 0 no espaço de coordenadas local) se torna após as traduções. Eu preciso conhecer esta informação no shader de fragmento. Eu assumi que posso criar um vetor em 0, 0, 0 e depois aplicar as mesmas traduções. No entanto, NÃO estou recebendo a resposta correta.

Minha pergunta: o que estou fazendo de errado e como posso depurar o que está acontecendo? Eu sei que o valor que está sendo calculado deve estar errado, mas não tenho uma ideia do que é. (Minha plataforma é o Xcode 4.2 no OS X em desenvolvimento para o OpenGL ES 2.0 iOS)

Aqui está o meu vertex shader:

// Vertex Shader for pixel-accurate rendering
attribute vec4 a_position;
attribute vec2 a_texCoord;

varying vec2 v_texCoord;

uniform float translateX;
uniform float translateY;

// Set up orthographic projection 
// this is for 640 x 960
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;

    // Translate
    gl_Position *= projectionMatrix;


    // Do all the same translations to a vector with origin at 0,0,0
    vec4 toPass = vec4(0, 0, 0, 1); // initialize.  doesn't matter if w is 1 or 0
    toPass.x += translateX;
    toPass.y += translateY;
    toPass *= projectionMatrix;

    // this SHOULD pass the computed value to my fragment shader.
    // unfortunately,  whatever value is sent, isn't right.
    //v_translatedOrigin = toPass;

    // instead, I use this as a workaround, since I do know the correct values for my
    // situation.  of course this is hardcoded and is terrible.
    v_translatedOrigin = vec4(500.0, 200.0, 0.0, 0.0);
}

EDITAR Em resposta à minha matriz ortográfica estar errada, é o seguinte wikipedia tem a dizer sobre projeções orto, e o meu -1 parece certo. porque no meu caso, por exemplo, o quarto elemento do meu tapete deve ser - ((direita + esquerda) / (direita-esquerda)), à direita de 960 à esquerda de 0, então -1 * (960/960), que é -1 .

EDITAR Eu descobri o problema raiz aqui -O que você acha

questionAnswers(2)

yourAnswerToTheQuestion