58 lines
1.7 KiB
Zig
58 lines
1.7 KiB
Zig
const std = @import("std");
|
|
const c = @cImport({
|
|
@cInclude("raylib.h");
|
|
@cInclude("rlgl.h");
|
|
});
|
|
|
|
const dark_mode = true;
|
|
const show_grid = false;
|
|
|
|
pub fn main() !void {
|
|
const screen_width = 640;
|
|
const screen_height = 360;
|
|
|
|
const cube_side = 1;
|
|
const size = c.Vector3{ .x = cube_side, .y = cube_side, .z = cube_side };
|
|
const position = c.Vector3{ .x = 0, .y = 0, .z = 0 };
|
|
const x_rot = 45;
|
|
const y_center: f32 = std.math.sqrt(3.0) * cube_side / 2.0;
|
|
const z_rot = std.math.radiansToDegrees(f32, std.math.atan(@as(f32, std.math.sqrt1_2)));
|
|
|
|
c.SetConfigFlags(c.FLAG_WINDOW_RESIZABLE | c.FLAG_VSYNC_HINT);
|
|
c.InitWindow(screen_width, screen_height, "Draw a Rotating Cube");
|
|
defer c.CloseWindow();
|
|
|
|
var camera = c.Camera{
|
|
.position = .{ .x = 3, .y = 3, .z = 3 },
|
|
.target = .{ .x = 0, .y = y_center, .z = 0 }, // Center of cube
|
|
.up = .{ .x = 0, .y = 1, .z = 0 },
|
|
.fovy = 45, // Camera field-of-view Y
|
|
.projection = c.CAMERA_PERSPECTIVE,
|
|
};
|
|
|
|
c.SetTargetFPS(60);
|
|
|
|
while (!c.WindowShouldClose()) // Detect window close button or ESC key
|
|
{
|
|
c.UpdateCamera(&camera, c.CAMERA_ORBITAL);
|
|
|
|
c.BeginDrawing();
|
|
defer c.EndDrawing();
|
|
|
|
c.ClearBackground(if (dark_mode) c.BLACK else c.RAYWHITE);
|
|
{
|
|
c.BeginMode3D(camera);
|
|
defer c.EndMode3D();
|
|
{
|
|
c.rlPushMatrix();
|
|
defer c.rlPopMatrix();
|
|
c.rlTranslatef(0, y_center, 0);
|
|
c.rlRotatef(z_rot, 0, 0, 1);
|
|
c.rlRotatef(x_rot, 1, 0, 0);
|
|
c.DrawCubeWiresV(position, size, if (dark_mode) c.LIME else c.BLACK);
|
|
}
|
|
if (show_grid) c.DrawGrid(12, 0.75);
|
|
}
|
|
}
|
|
}
|