commit cf43653b6fb397f55bff8958d8590afeaf688ad7
parent b4fa258cf6d247b3ec3fdee16250ee1b4cb65d4d
Author: bsandro <email@bsandro.tech>
Date: Fri, 21 Nov 2025 01:19:41 +0200
cubes rotate with random speed
Diffstat:
| M | cube.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);