In my project I use a fairly complex camera glass which doues trackball / arcball rotation arround the center. That works fine sofar. For the creation of the MVP matrix I use:

```
// Get a handle for our "MVP" uniform
GLuint MatrixID = glGetUniformLocation(shaderProgram, "MVP");
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1 <-> 100 units
glm::mat4 projection = glm::perspective(glm::radians(45.0f), 4.0f / 3.0f, 0.1f, 50.f);
// Camera matrix
glm::mat4 view = camera->getMatrix();
// Model matrix -> identity matrix (origin)
glm::mat4 model = glm::mat4(1.0f);
// our ModelViewProjection : multiplication of our 3 matrices
glm::mat4 MVP = projection * view * model;
```

VertexShader is also not surprising (just showing a part here) `v_position = MVP * vec4(vPos,1); `

and works well so far.

To get the normalized direction that the mouse is pointing at I use the following code:

` direction = glm::normalize( glm::unProject(glm::vec3(mouseX,700 - mouseY, 1), model, projection, glm::vec4(0.0f, 0.0f, 700, 700)));`

– wehere 700 is the width and height of the screen.

At some other point I try to do intersections tests using the glm intersectRayTriangle function:

`glm::intersectRayTriangle(cameraPosition, direction , v0, v1, v2, intersectionPos, dist)`

And here is the problem: I don’t get right results, so I guess somewhere in the unProject code a error is existing. Maybe someone has an idea about that.

Source: Windows Questions C++