diff options
| -rw-r--r-- | src/main.zig | 30 | ||||
| -rw-r--r-- | src/rtw/hittable.zig | 26 | ||||
| -rw-r--r-- | src/rtw/material.zig | 6 | ||||
| -rw-r--r-- | src/rtw/perlin.zig | 17 |
4 files changed, 33 insertions, 46 deletions
diff --git a/src/main.zig b/src/main.zig index 2dd208a..d81a6e6 100644 --- a/src/main.zig +++ b/src/main.zig @@ -1,7 +1,4 @@ const std = @import("std"); -const debug = std.debug; -const math = std.math; -const ArrayList = std.ArrayList; const zigimg = @import("zigimg"); const Image = zigimg.Image; @@ -49,11 +46,8 @@ fn makeSphere(center: Point3, radius: f64, material: *const Material) Hittable { }; } -const inf = math.inf(f64); -const pi = math.pi; - fn deg2rad(degree: f64) f64 { - return degree * pi / 180.0; + return degree * std.math.pi / 180.0; } const Camera = struct { @@ -125,7 +119,7 @@ fn rayColor(r: Ray, background: Color, world: Hittable, rng: Random, depth: u32) // If we've exceeded the ray bounce limit, no more ligth is gathered. return rgb(0.0, 0.0, 0.0); } - if (!world.hit(r, 0.001, inf, &rec)) { + if (!world.hit(r, 0.001, std.math.inf(f64), &rec)) { // If the ray hits nothing, return the background color. return background; } @@ -142,7 +136,7 @@ fn rayColor(r: Ray, background: Color, world: Hittable, rng: Random, depth: u32) fn generateTwoSpheres(rng: Random, allocator: anytype) !Hittable { _ = rng; - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); const checker = try Texture.makeChecker(allocator, rgb(0.2, 0.3, 0.1), rgb(0.9, 0.9, 0.9)); const mat1 = try allocator.create(Material); @@ -158,7 +152,7 @@ fn generateTwoSpheres(rng: Random, allocator: anytype) !Hittable { } fn generateTwoPerlinSpheres(rng: Random, allocator: anytype) !Hittable { - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); const perlin = try Texture.makeNoise(allocator, 4.0, rng); const mat1 = try allocator.create(Material); @@ -174,7 +168,7 @@ fn generateTwoPerlinSpheres(rng: Random, allocator: anytype) !Hittable { } fn generateRandomScene(rng: Random, allocator: anytype) !Hittable { - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); const mat_ground = try allocator.create(Material); const mat1 = try allocator.create(Material); @@ -240,7 +234,7 @@ fn generateRandomScene(rng: Random, allocator: anytype) !Hittable { } fn generateEarthScene(allocator: anytype) !Hittable { - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); const earth_texture = try Texture.makeImage(allocator, "assets/sekaichizu.png"); const earth_surface = try allocator.create(Material); @@ -253,7 +247,7 @@ fn generateEarthScene(allocator: anytype) !Hittable { } fn generateSimpleLightScene(rng: Random, allocator: anytype) !Hittable { - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); const perlin = try Texture.makeNoise(allocator, 4.0, rng); const mat1 = try allocator.create(Material); @@ -276,7 +270,7 @@ fn generateSimpleLightScene(rng: Random, allocator: anytype) !Hittable { } fn generateCornellBox(allocator: anytype) !Hittable { - var hittable_objects = ArrayList(Hittable).init(allocator); + var hittable_objects = std.ArrayList(Hittable).init(allocator); var red = try Rc(Material).init(allocator); var white = try Rc(Material).init(allocator); @@ -314,7 +308,7 @@ fn generateCornellBox(allocator: anytype) !Hittable { pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); - defer debug.assert(gpa.deinit() == .ok); + defer std.debug.assert(gpa.deinit() == .ok); var rng_ = std.Random.DefaultPrng.init(42); const rng = rng_.random(); @@ -413,9 +407,9 @@ pub fn main() !void { } const scale = 1.0 / @as(f64, @floatFromInt(samples_per_pixel)); image.pixels.rgb24[i + (image_height - j - 1) * image_width] = .{ - .r = @intFromFloat(256.0 * math.clamp(@sqrt(pixelColor.x * scale), 0.0, 0.999)), - .g = @intFromFloat(256.0 * math.clamp(@sqrt(pixelColor.y * scale), 0.0, 0.999)), - .b = @intFromFloat(256.0 * math.clamp(@sqrt(pixelColor.z * scale), 0.0, 0.999)), + .r = @intFromFloat(256.0 * std.math.clamp(@sqrt(pixelColor.x * scale), 0.0, 0.999)), + .g = @intFromFloat(256.0 * std.math.clamp(@sqrt(pixelColor.y * scale), 0.0, 0.999)), + .b = @intFromFloat(256.0 * std.math.clamp(@sqrt(pixelColor.z * scale), 0.0, 0.999)), }; } } diff --git a/src/rtw/hittable.zig b/src/rtw/hittable.zig index 3816b4a..447d552 100644 --- a/src/rtw/hittable.zig +++ b/src/rtw/hittable.zig @@ -1,8 +1,4 @@ const std = @import("std"); -const debug = std.debug; -const math = std.math; -const pi = math.pi; -const ArrayList = std.ArrayList; const Rc = @import("../rc.zig").Rc; @@ -164,10 +160,10 @@ const Sphere = struct { } fn getSphereUv(p: Point3, u: *f64, v: *f64) void { - const phi = math.atan2(-p.z, p.x) + pi; - const theta = math.acos(-p.y); - u.* = phi / (2.0 * pi); - v.* = theta / pi; + const phi = std.math.atan2(-p.z, p.x) + std.math.pi; + const theta = std.math.acos(-p.y); + u.* = phi / (2.0 * std.math.pi); + v.* = theta / std.math.pi; } fn deinit(sphere: *const Sphere) void { @@ -247,7 +243,7 @@ const MovingSphere = struct { }; const HittableList = struct { - objects: ArrayList(Hittable), + objects: std.ArrayList(Hittable), fn hit(list: HittableList, r: Ray, t_min: f64, t_max: f64, record: *HitRecord) bool { var hit_anything = false; @@ -294,7 +290,7 @@ const BvhNode = struct { box: Aabb, fn init( - objects: ArrayList(*Hittable), + objects: std.ArrayList(*Hittable), start: usize, end: usize, time0: f64, @@ -538,7 +534,7 @@ const Box = struct { sides: HittableList, pub fn init(p0: Point3, p1: Point3, material: Rc(Material), allocator: anytype) !Box { - var sides = ArrayList(Hittable).init(allocator); + var sides = std.ArrayList(Hittable).init(allocator); try sides.append(.{ .xyRect = .{ .x0 = p0.x, .x1 = p1.x, .y0 = p0.y, .y1 = p1.y, .k = p1.z, .material = material } }); try sides.append(.{ .xyRect = .{ .x0 = p0.x, .x1 = p1.x, .y0 = p0.y, .y1 = p1.y, .k = p0.z, .material = material.clone() } }); @@ -617,13 +613,13 @@ const RotateY = struct { bbox: Aabb, pub fn init(object: Rc(Hittable), t: f64) Self { - const sin_t = math.sin(t); - const cos_t = math.cos(t); + const sin_t = std.math.sin(t); + const cos_t = std.math.cos(t); var bbox: Aabb = undefined; _ = object.get().boudingBox(0, 0, &bbox); - var min: Point3 = .{ .x = math.inf(f64), .y = math.inf(f64), .z = math.inf(f64) }; - var max: Point3 = .{ .x = -math.inf(f64), .y = -math.inf(f64), .z = -math.inf(f64) }; + var min: Point3 = .{ .x = std.math.inf(f64), .y = std.math.inf(f64), .z = std.math.inf(f64) }; + var max: Point3 = .{ .x = -std.math.inf(f64), .y = -std.math.inf(f64), .z = -std.math.inf(f64) }; var i: u32 = 0; while (i < 2) : (i += 1) { diff --git a/src/rtw/material.zig b/src/rtw/material.zig index c1f33ee..f901f26 100644 --- a/src/rtw/material.zig +++ b/src/rtw/material.zig @@ -1,6 +1,4 @@ const std = @import("std"); -const debug = std.debug; -const math = std.math; const Ray = @import("ray.zig").Ray; const vec = @import("vec.zig"); @@ -66,7 +64,7 @@ pub const MetalMaterial = struct { fuzz: f64, fn scatter(mat: MetalMaterial, r_in: Ray, record: HitRecord, attenuation: *Color, scattered: *Ray, rng: Random) bool { - debug.assert(mat.fuzz <= 1.0); + std.debug.assert(mat.fuzz <= 1.0); const reflected = reflect(r_in.dir.normalized(), record.normal); scattered.* = .{ .origin = record.p, .dir = reflected.add(randomPointInUnitSphere(rng).mul(mat.fuzz)), .time = r_in.time }; attenuation.* = mat.albedo; @@ -96,7 +94,7 @@ pub const DielectricMaterial = struct { fn reflectance(cos: f64, refraction_idx: f64) f64 { const r0 = (1.0 - refraction_idx) / (1.0 + refraction_idx); const r1 = r0 * r0; - return r1 + (1.0 - r1) * math.pow(f64, 1.0 - cos, 5.0); + return r1 + (1.0 - r1) * std.math.pow(f64, 1.0 - cos, 5.0); } }; diff --git a/src/rtw/perlin.zig b/src/rtw/perlin.zig index 77a075d..cb23e11 100644 --- a/src/rtw/perlin.zig +++ b/src/rtw/perlin.zig @@ -1,5 +1,4 @@ const std = @import("std"); -const ArrayList = std.ArrayList; const rand = @import("rand.zig"); const Random = rand.Random; @@ -11,17 +10,17 @@ const Vec3 = @import("vec.zig").Vec3; pub const Perlin = struct { const POINT_COUNT = 256; - randomVec: ArrayList(Vec3), - permX: ArrayList(usize), - permY: ArrayList(usize), - permZ: ArrayList(usize), + randomVec: std.ArrayList(Vec3), + permX: std.ArrayList(usize), + permY: std.ArrayList(usize), + permZ: std.ArrayList(usize), pub fn init(allocator: std.mem.Allocator, rng: Random) !Perlin { var perlin = Perlin{ - .randomVec = try ArrayList(Vec3).initCapacity(allocator, POINT_COUNT), - .permX = try ArrayList(usize).initCapacity(allocator, POINT_COUNT), - .permY = try ArrayList(usize).initCapacity(allocator, POINT_COUNT), - .permZ = try ArrayList(usize).initCapacity(allocator, POINT_COUNT), + .randomVec = try std.ArrayList(Vec3).initCapacity(allocator, POINT_COUNT), + .permX = try std.ArrayList(usize).initCapacity(allocator, POINT_COUNT), + .permY = try std.ArrayList(usize).initCapacity(allocator, POINT_COUNT), + .permZ = try std.ArrayList(usize).initCapacity(allocator, POINT_COUNT), }; var i: usize = 0; |
