Camera moving "too fast"

As you can see in the above screenshot, my camera is moving at speeds waaay faster than my player.
Here is the relevant code:

// Initializing
cammat4 = glm::ortho(left, right, bottom, top);
glUniformMatrix4fv(this->cam, 1, GL_FALSE, &cammat4[0][0]);


// Render loop
batch->SetCamMatrix4Translation(-playerB->GetPosition().x, playerB->GetPosition().y); // This sets cammat4[3][0] and cammat4[3][1].
batch->UpdateCamMatrix4(); // Sends the mat4 the shader

batch->Add(playerS, playerB->GetPosition().x, playerB->GetPosition().y, 1, 1.5f);

In my vertex shader, I’m just multiplying the vertex position by the MVP matrix.

Any value added to the right-hand column of cammat4 will be in normalised units, i.e. 1 unit is half the width/height of the window.

If you want to move in “user” units (i.e. the coordinate system used for left/right/bottom/top), you need to multiply the orthographic projection matrix by a translation matrix, and use the result as the MVP matrix.

May I ask which GLM function does this? glm::translate adds instead of setting.

glm::translate constructs a translation matrix and (depending upon which overload you use) multiplies that with an existing matrix.

I know, my question is, which function sets the translation?

EDIT: Excuse my brainfarts.

Now my rendering code is the following:

glm::mat4& cammat4 = this->batch->GetCamMatrix4();
cammat4 = glm::translate(cammat4, glm::vec3(-playerb->GetLinearVelocity().x, playerb->GetLinearVelocity().y, 0));
this->batch->UpdateCamMatrix4();

I am now translating the camera by the velocity of the player.
However, nothing seems to have changed, no need to show another GIF, as there is no difference, it’s still using normalized units.

Not sure if bumping is allowed, but still, bump