-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: hackvr-turbo
action: commit
revision:
path_from:
revision_from: a99d404d847a0c13b91d1eacfef0a8a4f035245b:
path_to:
revision_to:

git.thebackupbox.net

hackvr-turbo

git://git.thebackupbox.net/hackvr-turbo

commit a99d404d847a0c13b91d1eacfef0a8a4f035245b
Author: Felix (xq) Queißner <git@mq32.de>
Date:   Sat Jul 4 02:55:44 2020 +0200

    First working version.

diff --git a/lib/hackvr/lib.zig b/lib/hackvr/lib.zig

index 7abfff29fe009f3ed19ec253b1f09f4043064907..

index ..e4349dd0fcecc67b5ad6800ad8ad355be3fe2f8c 100644

--- a/lib/hackvr/lib.zig
+++ b/lib/hackvr/lib.zig
@@ -33,13 +33,15 @@ pub const Group = struct {
     /// flat list of all shapes
     shapes: std.ArrayList(Shape3D),

-    transform: zlm.Mat4,
+    translation: zlm.Vec3,
+    rotation: zlm.Vec3,

     pub fn init(allocator: *std.mem.Allocator, name: []const u8) Self {
         return Self{
             .name = name,
             .shapes = std.ArrayList(Shape3D).init(allocator),
-            .transform = zlm.Mat4.identity,
+            .translation = zlm.Vec3.zero,
+            .rotation = zlm.Vec3.zero,
         };
     }

@@ -159,14 +161,19 @@ pub fn applyEventToState(state: *State, event: parsing.Event) !void {
         },
         .move => |cmd| {
             var iter = state.findGroups(cmd.selector.groups);
-            while (iter.next()) |*grp| {
-                // semantics unclear
+            while (iter.next()) |grp| {
+                switch (cmd.direction) {
+                    .offset => |offset| {
+                        grp.translation = offset.apply(grp.translation);
+                    },
+                    else => std.debug.panic("relative movement not implemented yet", .{}),
+                }
             }
         },
         .rotate => |cmd| {
             var iter = state.findGroups(cmd.selector.groups);
-            while (iter.next()) |*grp| {
-                // semantics unclear
+            while (iter.next()) |grp| {
+                grp.rotation = cmd.vector.apply(grp.rotation);
             }
         },
         else => {
diff --git a/lib/hackvr/parser.zig b/lib/hackvr/parser.zig

index f0befa1f730823f8ba855b34a25f04c7729e8f8c..

index ..d7f6fe479ea8774e10adb25c3cb8f931404cf091 100644

--- a/lib/hackvr/parser.zig
+++ b/lib/hackvr/parser.zig
@@ -369,8 +369,8 @@ pub const AbsRelVector = struct {
     pub fn apply(self: Self, v3d: hvr.Vec3D) hvr.Vec3D {
         return .{
             .x = self.x.apply(v3d.x),
-            .y = self.x.apply(v3d.y),
-            .z = self.x.apply(v3d.z),
+            .y = self.y.apply(v3d.y),
+            .z = self.z.apply(v3d.z),
         };
     }
 };
diff --git a/lib/zgl b/lib/zgl

index c37cf0cfbeeab94cc07121ce3c817cc6813c15fd..

index ..b61a011872482d55f3b603f279fc3c39b8ae8b38 160000

--- a/lib/zgl
+++ b/lib/zgl
@@ -1 +1 @@
-Subproject commit c37cf0cfbeeab94cc07121ce3c817cc6813c15fd
+Subproject commit b61a011872482d55f3b603f279fc3c39b8ae8b38
diff --git a/lib/zlm b/lib/zlm

index 3d948806d30245c1ba575f53fc361490f7db9f12..

index ..f64f7fed4c0a2fbef8586a7ab6f0d3a9644d6aba 160000

--- a/lib/zlm
+++ b/lib/zlm
@@ -1 +1 @@
-Subproject commit 3d948806d30245c1ba575f53fc361490f7db9f12
+Subproject commit f64f7fed4c0a2fbef8586a7ab6f0d3a9644d6aba
diff --git a/src/main.zig b/src/main.zig

index 51a299aad5245a01988e7b2471ffa32bc61f20c8..

index ..b61779a680bff635d72dde0f26e718a7ad13da7e 100644

--- a/src/main.zig
+++ b/src/main.zig
@@ -153,9 +153,23 @@ pub fn main() anyerror!void {
     var vertex_buffer = try gl.createBuffer();
     defer vertex_buffer.delete();

+    const PolygonGroup = struct {
+        transform: zlm.Mat4,
+        begin_tris: usize,
+        count_tris: usize,
+        begin_lines: usize,
+        count_lines: usize,
+    };
+
+    var poly_groups = std.ArrayList(PolygonGroup).init(gpa);
+    defer poly_groups.deinit();
+
     var vertex_list = std.ArrayList(Vertex).init(gpa);
     defer vertex_list.deinit();

+    var outline_list = std.ArrayList(Vertex).init(gpa);
+    defer outline_list.deinit();
+
     try vao.vertexBuffer(0, vertex_buffer, 0, @sizeOf(Vertex));

     var shader_program = try gl.createProgram();
@@ -216,8 +230,13 @@ pub fn main() anyerror!void {
     };

     try gl.enable(.depth_test);
+    try gl.depthFunc(.less_or_equal);
+
+    var time: f32 = 0.0;

     mainLoop: while (true) {
+        time += 1.0 / 60.0;
+
         // process events
         {
             var event: c.SDL_Event = undefined;
@@ -232,9 +251,21 @@ pub fn main() anyerror!void {
         // Render scene from HackVR dataset
         {
             vertex_list.shrink(0);
+            poly_groups.shrink(0);

             var groups = state.iterator();
             while (groups.next()) |group| {
+                var poly_grp = PolygonGroup{
+                    .begin_tris = vertex_list.items.len,
+                    .count_tris = undefined,
+                    .begin_lines = outline_list.items.len,
+                    .count_lines = undefined,
+                    .transform = zlm.Mat4.mul(
+                        zlm.Mat4.createAngleAxis(zlm.Vec3.unitY, zlm.toRadians(group.rotation.y)),
+                        zlm.Mat4.createTranslation(group.translation),
+                    ),
+                };
+
                 for (group.shapes.items) |shape| {
                     if (shape.points.len < 3) {
                         std.debug.print("count: {}\n", .{shape.points.len});
@@ -258,21 +289,44 @@ pub fn main() anyerror!void {

                             i += 1;
                         }
+
+                        i = 1;
+                        while (i < shape.points.len) {
+                            try outline_list.append(Vertex{
+                                .position = shape.points[i - 1],
+                                .color = palette[15],
+                            });
+                            try outline_list.append(Vertex{
+                                .position = shape.points[i],
+                                .color = palette[15],
+                            });
+                            i += 1;
+                        }
+                        try outline_list.append(Vertex{
+                            .position = shape.points[0],
+                            .color = palette[15],
+                        });
+                        try outline_list.append(Vertex{
+                            .position = shape.points[shape.points.len - 1],
+                            .color = palette[15],
+                        });
                     }
                 }
+                poly_grp.count_tris = vertex_list.items.len - poly_grp.begin_tris;
+                poly_grp.count_lines = outline_list.items.len - poly_grp.begin_lines;
+
+                try poly_groups.append(poly_grp);
             }
         }

-        try gl.namedBufferData(vertex_buffer, Vertex, vertex_list.items, .dynamic_draw);
-
         const mat_proj = zlm.Mat4.createPerspective(1.0, 16.0 / 9.0, 0.1, 10000.0);
         const mat_view = zlm.Mat4.createLookAt(
-            .{ .x = -20, .y = 0, .z = 0 },
+            .{ .x = -50, .y = 30, .z = 0 },
             .{ .x = 0, .y = 0, .z = 0 },
-            .{ .x = 0, .y = 1, .z = 0 },
+            zlm.Vec3.unitY,
         );

-        const mat_view_proj = zlm.Mat4.mul(mat_view, mat_proj);
+        const mat_view_proj = zlm.Mat4.createAngleAxis(zlm.Vec3.unitY, time).mul(mat_view.mul(mat_proj));

         // render graphics
         {
@@ -286,14 +340,32 @@ pub fn main() anyerror!void {
             try vao.bind();
             try shader_program.use();

-            try gl.programUniformMatrix4(
-                shader_program,
-                transform_loc,
-                false,
-                @ptrCast([*]const [4][4]f32, &mat_view_proj.fields)[0..1],
-            );
+            try gl.namedBufferData(vertex_buffer, Vertex, vertex_list.items, .dynamic_draw);
+
+            for (poly_groups.items) |poly_grp| {
+                const transform = zlm.Mat4.mul(poly_grp.transform, mat_view_proj);
+
+                try gl.programUniformMatrix4(
+                    shader_program,
+                    transform_loc,
+                    false,
+                    @ptrCast([*]const [4][4]f32, &transform.fields)[0..1],
+                );

-            try gl.drawArrays(.triangles, 0, vertex_list.items.len);
+                try gl.drawArrays(.triangles, poly_grp.begin_tris, poly_grp.count_tris);
+            }
+            try gl.namedBufferData(vertex_buffer, Vertex, outline_list.items, .dynamic_draw);
+            for (poly_groups.items) |poly_grp| {
+                const transform = zlm.Mat4.mul(poly_grp.transform, mat_view_proj);
+
+                try gl.programUniformMatrix4(
+                    shader_program,
+                    transform_loc,
+                    false,
+                    @ptrCast([*]const [4][4]f32, &transform.fields)[0..1],
+                );
+                try gl.drawArrays(.lines, poly_grp.begin_lines, poly_grp.count_lines);
+            }

             c.SDL_GL_SwapWindow(window);
             c.SDL_Delay(10);

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 18:20:09 2024