opengl_x11

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

commit cf43653b6fb397f55bff8958d8590afeaf688ad7
parent b4fa258cf6d247b3ec3fdee16250ee1b4cb65d4d
Author: bsandro <email@bsandro.tech>
Date:   Fri, 21 Nov 2025 01:19:41 +0200

cubes rotate with random speed

Diffstat:
Mcube.c | 21+++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/cube.c b/cube.c @@ -16,6 +16,9 @@ #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" +#define RANDOM(x) (rand() % (x)) +#define LEN(x) (sizeof(x)/sizeof(x[0])) + #define GL_CHECK(x) \ x; \ { \ @@ -105,6 +108,8 @@ void __attribute__((constructor)) start() { glm_mat4_print(trans1, stdout); t_started = current_ts(); + + srand(time(0)); } void __attribute((destructor)) end() { @@ -267,6 +272,12 @@ int main(int argc, char *argv[]) { glm_mat4_print(view, stdout); glm_mat4_print(projection, stdout); + float speeds[10]; + for (int i=0; i<LEN(speeds); ++i) { + speeds[i] = RANDOM(360); + } + assert(LEN(cubePositions)==LEN(speeds)); + while (1) { while (XPending(dpy)) { XEvent xev; @@ -289,11 +300,13 @@ int main(int argc, char *argv[]) { } } + double t = current_ts()-t_started; + glClearColor(0.1f, 0.1f, 0.15f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GLfloat iTime = glGetUniformLocation(shaderPrg, "iTime"); - glUniform1d(iTime, current_ts()-t_started); + glUniform1d(iTime, t); //printf("%f\n", fabsf(sinf(current_ts()-t_started))); //glm_rotate(model, glm_rad(1.f), (vec3){0.5f, 1.f, 0.f}); @@ -308,15 +321,15 @@ int main(int argc, char *argv[]) { glUniform1i(tex, 0); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, tex); - for (int i=0; i<sizeof(cubePositions)/sizeof(cubePositions[0]); ++i) { + for (int i=0; i<LEN(cubePositions); ++i) { mat4 model; glm_mat4_identity(model); glm_translate(model, cubePositions[i]); - GLfloat angle = 20.f * i + (current_ts()-t_started)*50; + GLfloat angle = 20.f * i + speeds[i]*t; glm_rotate(model, glm_rad(angle), (vec3){ 1.f, 0.3f, 0.5f }); GLuint loc_model = glGetUniformLocation(shaderPrg, "model"); glUniformMatrix4fv(loc_model, 1, GL_FALSE, model[0]); - glDrawArrays(GL_TRIANGLES, 0, sizeof(vertices)/sizeof(vertices[0])); + glDrawArrays(GL_TRIANGLES, 0, LEN(vertices)); } glXSwapBuffers(dpy, win);