digitalmars.D.learn - Perspective Projection
- Ruby The Roobster (40/40) Jul 28 2023 I again am having issues with OpenGL, this time with the
- Dennis (5/8) Jul 28 2023 How do you pass the matrix to OpenGL? Be careful that gl3n uses
- Ruby The Roobster (7/16) Jul 28 2023 Thank you very much! Changing GL_FALSE to GL_TRUE in all of the
I again am having issues with OpenGL, this time with the projection matrix. Using gl3n, I have the following code: ```d // model matrix mat4 trans = mat4(0f); trans.make_identity(); trans = trans.rotatex(radians(-55)); // view matrix: mat4 view = mat4(0f); view.make_identity(); view = view.translation(0f ,0f, -3f); // projection matrix mat4 projection; projection.make_identity(); projection = projection.perspective(800f, 600f, radians(45f), .1f, 100f); ``` I am binding all of these matrices to the correct locations, and this seems to be the gl3n equivalent to what is given in the OpenGL tutorial: ```c // create transformations glm::mat4 model = glm::mat4(1.0f); // make sure to initialize matrix to identity matrix first glm::mat4 view = glm::mat4(1.0f); glm::mat4 projection = glm::mat4(1.0f); model = glm::rotate(model, glm::radians(-55.0f), glm::vec3(1.0f, 0.0f, 0.0f)); view = glm::translate(view, glm::vec3(0.0f, 0.0f, -3.0f)); projection = glm::perspective(glm::radians(45.0f), 800f / 600f, 0.1f, 100.0f); ``` Everything displays fine (with orthographic projection, of course) if you leave the projection as the identity matrix, but setting it as I have done results in a blank screen. I assume it has to do with the values of `(projection * view * trans * vec4(vertex, 1)).w` not being 1. Should I just use a different library, and if so, how to use it to generate a perspective matrix?
Jul 28 2023
On Friday, 28 July 2023 at 16:08:43 UTC, Ruby The Roobster wrote:Everything displays fine (with orthographic projection, of course) if you leave the projection as the identity matrix, but setting it as I have done results in a blank screen.How do you pass the matrix to OpenGL? Be careful that gl3n uses row major matrices, but OpenGL uses column major matrices, so you either need to transpose it yourself, or pass `true` to the `transpose` argument in `glUniformMatrix4fv`.
Jul 28 2023
On Friday, 28 July 2023 at 16:20:26 UTC, Dennis wrote:On Friday, 28 July 2023 at 16:08:43 UTC, Ruby The Roobster wrote:Thank you very much! Changing GL_FALSE to GL_TRUE in all of the `glUniformMatrix4fv` calls resulted in something being displayed, though very incorrectly. As it turns out, there is an inconsistency in the gl3n API, that you write a rotation matrix in radians, but you must write the FOV in degrees. After that, it worked as it was supposed to.Everything displays fine (with orthographic projection, of course) if you leave the projection as the identity matrix, but setting it as I have done results in a blank screen.How do you pass the matrix to OpenGL? Be careful that gl3n uses row major matrices, but OpenGL uses column major matrices, so you either need to transpose it yourself, or pass `true` to the `transpose` argument in `glUniformMatrix4fv`.
Jul 28 2023