commit 3dfc6cfdb943fa00282d18931040e3b6dc016395
parent 68f5dde29344d90b5b80309112882e9d1d4a380e
Author: bsandro <email@bsandro.tech>
Date: Thu, 20 Nov 2025 22:29:45 +0200
model+view+projection matrices applied
Diffstat:
| M | cube.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);