Use castle for vecmath (doesn't work fully yet)
This commit is contained in:
56
src/Game.zig
56
src/Game.zig
@@ -6,6 +6,7 @@ const glfw = @import("zglfw");
|
||||
const math = @import("math.zig");
|
||||
const shaders = @import("shaders.zig");
|
||||
const vk = @import("vulkan");
|
||||
const vm = @import("vecmath");
|
||||
const worldgen = @import("worldgen.zig");
|
||||
|
||||
const Blocks = @import("assets/Blocks.zig");
|
||||
@@ -15,17 +16,11 @@ const CommandBuffer = @import("engine/CommandBuffer.zig");
|
||||
const Engine = @import("engine/Engine.zig");
|
||||
const Iterator2 = math.Iterator2;
|
||||
const Materials = @import("assets/Materials.zig");
|
||||
const Matrix4x4 = math.Matrix4x4;
|
||||
const Player = @import("Player.zig");
|
||||
const Quaternion = math.Quaternion;
|
||||
const Skybox = @import("engine/Skybox.zig");
|
||||
const StagingBuffer = @import("engine/StagingBuffer.zig");
|
||||
const Swapchain = @import("engine/Swapchain.zig");
|
||||
const Textures = @import("assets/Textures.zig");
|
||||
const Vector2 = math.Vector2;
|
||||
const Vector2x8 = math.Vector2x8;
|
||||
const Vector3 = math.Vector3;
|
||||
const Vector3Int = math.Vector3Int;
|
||||
|
||||
allocator: std.mem.Allocator,
|
||||
engine: *Engine,
|
||||
@@ -545,7 +540,7 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
while (it.next()) |chunk_coords2| {
|
||||
const chunk_coords3 = chunk_coords2 ++ [_]i16{0};
|
||||
|
||||
const origin = Vector3.init(
|
||||
const origin = vm.Vector3.init(
|
||||
@floatFromInt(chunk_coords3[0]),
|
||||
@floatFromInt(chunk_coords3[1]),
|
||||
@floatFromInt(chunk_coords3[2]),
|
||||
@@ -564,14 +559,14 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
|
||||
var y: usize = 0;
|
||||
while (y < 16) : (y += 1) {
|
||||
const fpos0 = Vector2x8.initScalars(
|
||||
const fpos0 = vm.Vector2x8.init(
|
||||
.{ 0, 1, 2, 3, 4, 5, 6, 7 },
|
||||
@splat(@floatFromInt(y)),
|
||||
).add(.initVector(origin.asVector2()));
|
||||
const fpos1 = Vector2x8.initScalars(
|
||||
).add(.splat(origin.dropZ()));
|
||||
const fpos1 = vm.Vector2x8.init(
|
||||
.{ 8, 9, 10, 11, 12, 13, 14, 15 },
|
||||
@splat(@floatFromInt(y)),
|
||||
).add(.initVector(origin.asVector2()));
|
||||
).add(.splat(origin.dropZ()));
|
||||
|
||||
const iheight0 = worldgen.heightIv(world_seed, fpos0);
|
||||
const iheight1 = worldgen.heightIv(world_seed, fpos1);
|
||||
@@ -596,7 +591,7 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
}
|
||||
}
|
||||
|
||||
const player_position_vx = Vector3Int.init(0, 0, worldgen.heightI(world_seed, .zero) + 1);
|
||||
const player_position_vx = vm.Vector3Int.init(0, 0, worldgen.heightI(world_seed, .zero) + 1);
|
||||
const player_position_sv = player_position_vx
|
||||
.mulScalar(c.sv_per_vx)
|
||||
.add(.init(c.sv_per_vx / 2, c.sv_per_vx / 2, 0));
|
||||
@@ -623,8 +618,8 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
|
||||
const directional_lights_data: []const shaders.DirectionalLight = &.{
|
||||
.{
|
||||
.directionWS = .{ 0, 0, -1 },
|
||||
.color = .{ 0.3, 0.3, 0.3 },
|
||||
.directionWS = .unit_nz,
|
||||
.color = .init(0.3, 0.3, 0.3),
|
||||
},
|
||||
};
|
||||
try directional_lights.write(engine, .{
|
||||
@@ -765,30 +760,33 @@ fn render(self: *Game) !void {
|
||||
|
||||
const extent = self.swapchain.extent;
|
||||
|
||||
const framebuffer_size = Vector2.init(
|
||||
const framebuffer_size = vm.Vector2.init(
|
||||
@floatFromInt(extent.width),
|
||||
@floatFromInt(extent.height),
|
||||
);
|
||||
|
||||
const camera_position = self.player.position_sv
|
||||
.asVector3()
|
||||
const camera_position = vm.Vector3.init(
|
||||
@floatFromInt(self.player.position_sv.x),
|
||||
@floatFromInt(self.player.position_sv.y),
|
||||
@floatFromInt(self.player.position_sv.z),
|
||||
)
|
||||
.divScalar(c.sv_per_vx)
|
||||
.add(.init(0, 0, Player.camera_height_vx));
|
||||
const camera_rotation = Quaternion.mulQuaternion(
|
||||
.initRotationXY(self.player.yaw_rad),
|
||||
.initRotationYZ(self.player.pitch_rad),
|
||||
const camera_rotation = vm.Quaternion.mulQuaternion(
|
||||
.initRotation(.XY, self.player.yaw_turns),
|
||||
.initRotation(.YZ, self.player.pitch_turns),
|
||||
);
|
||||
const camera_aspect_ratio = framebuffer_size.getX() / framebuffer_size.getY();
|
||||
const camera_aspect_ratio = framebuffer_size.x / framebuffer_size.y;
|
||||
const camera_yscale = 1.0 / @tan(0.5 * self.player.vertical_fov_deg * std.math.rad_per_deg);
|
||||
const camera_xscale = camera_yscale / camera_aspect_ratio;
|
||||
|
||||
const matrix_ws_to_vs = Matrix4x4.mulMatrix(
|
||||
Matrix4x4.initRotation(camera_rotation.conjugate()),
|
||||
Matrix4x4.initTranslation(camera_position.negate()),
|
||||
const matrix_ws_to_vs = vm.Matrix4x4.mulMatrixAffine(
|
||||
.initRotation(camera_rotation.inverseUnit()),
|
||||
.initTranslation(camera_position.negate()),
|
||||
);
|
||||
|
||||
// zig fmt: off
|
||||
const matrix_vs_to_cs = Matrix4x4.init(
|
||||
const matrix_vs_to_cs = vm.Matrix4x4.init(
|
||||
camera_xscale, 0, 0, 0,
|
||||
0, 0, 0, 1,
|
||||
0, -camera_yscale, 0, 0,
|
||||
@@ -796,12 +794,12 @@ fn render(self: *Game) !void {
|
||||
);
|
||||
// zig fmt: on
|
||||
|
||||
const ambient_light = Vector3.init(0.01, 0.01, 0.01);
|
||||
const ambient_light = vm.Vector3.init(0.01, 0.01, 0.01);
|
||||
|
||||
const global_uniforms_data: shaders.GlobalUniforms = .{
|
||||
.matrixWStoVS = matrix_ws_to_vs.asArray(),
|
||||
.matrixVStoCS = matrix_vs_to_cs.asArray(),
|
||||
.ambientLight = ambient_light.asArray(),
|
||||
.matrixWStoVS = matrix_ws_to_vs,
|
||||
.matrixVStoCS = matrix_vs_to_cs,
|
||||
.ambientLight = ambient_light,
|
||||
};
|
||||
|
||||
const staging_memory = try self.global_uniforms_staging_buffer.map(self.engine);
|
||||
|
||||
Reference in New Issue
Block a user