Camera controls, fix some math; lighting probably broken

This commit is contained in:
2025-11-13 17:01:10 +01:00
parent 4cbf151fd9
commit a011603195
10 changed files with 394 additions and 169 deletions

38
src/math/Iterator3.zig Normal file
View File

@@ -0,0 +1,38 @@
const Vector3 = @import("Vector3.zig").Vector3;
min: Vector3,
max: Vector3,
step: Vector3,
current: ?Vector3,
pub fn init(min: Vector3, max: Vector3, step: Vector3) @This() {
return .{
.min = min,
.max = max,
.step = step,
.current = min,
};
}
pub fn next(self: *@This()) ?Vector3 {
const current = self.current orelse return null;
var next_current = current;
next_current = next_current.setX(next_current.getX() + self.step.getX());
if (next_current.getX() > self.max.getX()) {
next_current = next_current.setX(self.min.getX());
next_current = next_current.setY(next_current.getY() + self.step.getY());
if (next_current.getY() > self.max.getY()) {
next_current = next_current.setY(self.min.getY());
next_current = next_current.setZ(next_current.getZ() + self.step.getZ());
if (next_current.getZ() > self.max.getZ()) {
self.current = null;
return null;
}
}
}
self.current = next_current;
return next_current;
}

View File

@@ -30,12 +30,12 @@ pub const Vector2 = extern struct {
pub inline fn asVector3(self: Vector2, z: f32) Vector3 {
const z_vector: @Vector(3, f32) = .{ undefined, undefined, z };
return .{ .vector = @shuffle(f32, self.vector, z_vector, .{ 0, 1, ~@as(i32, -2) }) };
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2) }) };
}
pub inline fn asVector4(self: Vector4, z: f32, w: f32) Vector4 {
const zw_vector: @Vector(4, f32) = .{ undefined, undefined, z, w };
return .{ .vector = @shuffle(f32, self.vector, zw_vector, .{ 0, 1, ~@as(i32, -2), ~@as(i32, -3) }) };
return .{ .vector = @shuffle(f32, self.vector, zw_vector, [_]i32{ 0, 1, ~@as(i32, 2), ~@as(i32, 3) }) };
}
// --- ACCESSORS ---
@@ -50,12 +50,12 @@ pub const Vector2 = extern struct {
pub inline fn setX(self: Vector2, x: f32) Vector2 {
const x_vector: Vector = @splat(x);
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1 }) };
return .{ .vector = @shuffle(f32, self.vector, x_vector, .{ ~@as(i32, 0), 1 }) };
}
pub inline fn setY(self: Vector2, y: f32) Vector2 {
const y_vector: Vector = @splat(y);
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1) }) };
return .{ .vector = @shuffle(f32, self.vector, y_vector, .{ 0, ~@as(i32, 1) }) };
}
// --- COMPONENT-WISE ---
@@ -138,8 +138,8 @@ pub const Vector2 = extern struct {
const s = @sin(angle_rad);
return .{
.vector = .{
self.x * c - self.y * s,
self.x * s + self.x * c,
self.getX() * c - self.getY() * s,
self.getX() * s + self.getY() * c,
},
};
}

View File

@@ -31,12 +31,12 @@ pub const Vector3 = extern struct {
}
pub inline fn asVector2(self: Vector3) Vector2 {
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1 }) };
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1 }) };
}
pub inline fn asVector4(self: Vector3, w: f32) Vector4 {
const w_vector: @Vector(4, f32) = .{ undefined, undefined, undefined, w };
return .{ .vector = @shuffle(f32, self.vector, w_vector, .{ 0, 1, 2, ~@as(i32, -3) }) };
return .{ .vector = @shuffle(f32, self.vector, w_vector, [_]i32{ 0, 1, 2, ~@as(i32, 3) }) };
}
// --- ACCESSORS ---
@@ -55,17 +55,17 @@ pub const Vector3 = extern struct {
pub inline fn setX(self: Vector3, x: f32) Vector3 {
const x_vector: Vector = @splat(x);
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1, 2 }) };
return .{ .vector = @shuffle(f32, self.vector, x_vector, [_]i32{ ~@as(i32, 0), 1, 2 }) };
}
pub inline fn setY(self: Vector3, y: f32) Vector3 {
const y_vector: Vector = @splat(y);
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1), 2 }) };
return .{ .vector = @shuffle(f32, self.vector, y_vector, [_]i32{ 0, ~@as(i32, 1), 2 }) };
}
pub inline fn setZ(self: Vector3, z: f32) Vector3 {
const z_vector: Vector = @splat(z);
return .{ .vector = @shuffle(f32, self, z_vector, .{ 0, 1, ~@as(i32, 2) }) };
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2) }) };
}
// --- COMPONENT-WISE ---

View File

@@ -31,11 +31,11 @@ pub const Vector4 = extern struct {
}
pub inline fn asVector2(self: Vector4) Vector2 {
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1 }) };
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1 }) };
}
pub inline fn asVector3(self: Vector4) Vector3 {
return .{ .vector = @shuffle(f32, self.vector, undefined, .{ 0, 1, 2 }) };
return .{ .vector = @shuffle(f32, self.vector, undefined, [_]i32{ 0, 1, 2 }) };
}
// --- ACCESSORS ---
@@ -58,22 +58,22 @@ pub const Vector4 = extern struct {
pub inline fn setX(self: Vector4, x: f32) Vector4 {
const x_vector: Vector = @splat(x);
return .{ .vector = @shuffle(f32, self, x_vector, .{ ~@as(i32, 0), 1, 2, 3 }) };
return .{ .vector = @shuffle(f32, self.vector, x_vector, [_]i32{ ~@as(i32, 0), 1, 2, 3 }) };
}
pub inline fn setY(self: Vector4, y: f32) Vector4 {
const y_vector: Vector = @splat(y);
return .{ .vector = @shuffle(f32, self, y_vector, .{ 0, ~@as(i32, 1), 2, 3 }) };
return .{ .vector = @shuffle(f32, self.vector, y_vector, [_]i32{ 0, ~@as(i32, 1), 2, 3 }) };
}
pub inline fn setZ(self: Vector4, z: f32) Vector4 {
const z_vector: Vector = @splat(z);
return .{ .vector = @shuffle(f32, self, z_vector, .{ 0, 1, ~@as(i32, 2), 3 }) };
return .{ .vector = @shuffle(f32, self.vector, z_vector, [_]i32{ 0, 1, ~@as(i32, 2), 3 }) };
}
pub inline fn setW(self: Vector4, w: f32) Vector4 {
const w_vector: Vector = @splat(w);
return .{ .vector = @shuffle(f32, self, w_vector, .{ 0, 1, 2, ~@as(i32, 3) }) };
return .{ .vector = @shuffle(f32, self.vector, w_vector, [_]i32{ 0, 1, 2, ~@as(i32, 3) }) };
}
// --- COMPONENT-WISE ---