opengl_x11

Playing with OpenGL
git clone git://bsandro.tech/opengl_x11
Log | Files | Refs | README | LICENSE

commit 3dfc6cfdb943fa00282d18931040e3b6dc016395
parent 68f5dde29344d90b5b80309112882e9d1d4a380e
Author: bsandro <email@bsandro.tech>
Date:   Thu, 20 Nov 2025 22:29:45 +0200

model+view+projection matrices applied

Diffstat:
Mcube.c | 37++++++++++++++++++++++++-------------
1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/cube.c b/cube.c @@ -34,15 +34,17 @@ static const double current_ts() { static double t_started; -//@todo move shaders to separate files +//@todo maybe move shaders to separate files static const GLchar *vertexSrc = R"( #version 420 layout(location=0) in vec2 position; layout(location=1) in vec2 aTexCoord; out vec2 texCoord; -uniform mat4 trans; +uniform mat4 model; +uniform mat4 view; +uniform mat4 projection; void main() { - gl_Position = trans * vec4(position, 0.0, 1.0); + gl_Position = projection * view * model * vec4(position, 0.0, 1.0); texCoord = aTexCoord; } )"; @@ -51,7 +53,7 @@ static const GLchar *fragmentSrc = R"( #version 420 uniform double iTime; uniform sampler2D ourTex; -uniform mat4 trans; +//uniform mat4 trans; out vec4 outColor; in vec2 texCoord; void main() { @@ -216,13 +218,18 @@ int main(int argc, char *argv[]) { glVertexAttribPointer(aTexCoord, 2, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), (void *)(2*sizeof(GLfloat))); glEnableVertexAttribArray(aTexCoord); - mat4 trans; - glm_mat4_identity(trans); - //glm_rotate(trans, glm_rad(90.0f), (vec3){0.0, 0.0, 1.0}); - glm_scale(trans, (vec3){1.2, 1.2, 1.2}); - glm_mat4_print(trans, stdout); + mat4 model; + glm_mat4_identity(model); + glm_rotate(model, glm_rad(-55.f), (vec3){1.f, 0.f, 0.f}); + mat4 view; + glm_mat4_identity(view); + glm_translate(view, (vec3){0.f, 0.f, -3.f}); + mat4 projection; + glm_perspective(glm_rad(45.f), 800.f/600.f, 0.1f, 100.f, projection); - float rotation = 1.f; + glm_mat4_print(model, stdout); + glm_mat4_print(view, stdout); + glm_mat4_print(projection, stdout); while (1) { while (XPending(dpy)) { @@ -253,9 +260,13 @@ int main(int argc, char *argv[]) { glUniform1d(iTime, current_ts()-t_started); //printf("%f\n", fabsf(sinf(current_ts()-t_started))); - glm_rotate(trans, glm_rad(rotation), (vec3){0.0, 0.0, 1.0}); - GLuint transform = glGetUniformLocation(shaderPrg, "trans"); - glUniformMatrix4fv(transform, 1, GL_FALSE, trans[0]); + //glm_rotate(view, glm_rad(rotation), (vec3){0.0, 0.0, 1.0}); + GLuint loc_model = glGetUniformLocation(shaderPrg, "model"); + glUniformMatrix4fv(loc_model, 1, GL_FALSE, model[0]); + GLuint loc_view = glGetUniformLocation(shaderPrg, "view"); + glUniformMatrix4fv(loc_view, 1, GL_FALSE, view[0]); + GLuint loc_projection = glGetUniformLocation(shaderPrg, "projection"); + glUniformMatrix4fv(loc_projection, 1, GL_FALSE, projection[0]); glUseProgram(shaderPrg); glUniform1i(tex, 0);