Aspect ratio for camera
This commit is contained in:
@@ -191,7 +191,8 @@ pub fn create() GameError!Self {
|
|||||||
.transform = .{},
|
.transform = .{},
|
||||||
.near = 1.0,
|
.near = 1.0,
|
||||||
.far = 1024.0,
|
.far = 1024.0,
|
||||||
.lens = .{ 1.5 * 16.0 / 9.0, 1.5 },
|
.lens = 1.5,
|
||||||
|
.aspect = 16.0 / 9.0,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -321,7 +322,7 @@ pub fn beginDraw(self: *Self) GameError!bool {
|
|||||||
self.command_buffer = sdl.AcquireGPUCommandBuffer(self.device) orelse return GameError.SdlError;
|
self.command_buffer = sdl.AcquireGPUCommandBuffer(self.device) orelse return GameError.SdlError;
|
||||||
if (self.to_resize) |new_size| {
|
if (self.to_resize) |new_size| {
|
||||||
try self.resetTextures(new_size[0], new_size[1]);
|
try self.resetTextures(new_size[0], new_size[1]);
|
||||||
self.camera.lens[0] = self.camera.lens[1] * @as(f32, @floatFromInt(new_size[0])) / @as(f32, @floatFromInt(new_size[1]));
|
self.camera.aspect = @as(f32, @floatFromInt(new_size[0])) / @as(f32, @floatFromInt(new_size[1]));
|
||||||
self.window_size = new_size;
|
self.window_size = new_size;
|
||||||
self.to_resize = null;
|
self.to_resize = null;
|
||||||
}
|
}
|
||||||
|
@@ -4,13 +4,16 @@ const Transform = @import("transform.zig");
|
|||||||
const Camera = @This();
|
const Camera = @This();
|
||||||
|
|
||||||
transform: Transform,
|
transform: Transform,
|
||||||
lens: @Vector(2, f32),
|
/// tangent of the half of the view angle (90 degress = 1 "lens")
|
||||||
|
lens: f32,
|
||||||
near: f32,
|
near: f32,
|
||||||
far: f32,
|
far: f32,
|
||||||
|
/// width = height * aspect
|
||||||
|
aspect: f32,
|
||||||
|
|
||||||
pub fn matrix(camera: Camera) @Vector(16, f32) {
|
pub fn matrix(camera: Camera) @Vector(16, f32) {
|
||||||
const xx = 1.0 / camera.lens[0];
|
const xx = 1.0 / (camera.lens * camera.aspect);
|
||||||
const yy = 1.0 / camera.lens[1];
|
const yy = 1.0 / camera.lens;
|
||||||
const fnmod = 1.0 / (camera.far - camera.near);
|
const fnmod = 1.0 / (camera.far - camera.near);
|
||||||
const zz = camera.far * fnmod;
|
const zz = camera.far * fnmod;
|
||||||
const wz = -camera.near * camera.far * fnmod;
|
const wz = -camera.near * camera.far * fnmod;
|
||||||
|
Reference in New Issue
Block a user