aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.zig30
-rw-r--r--src/rtw/hittable.zig26
-rw-r--r--src/rtw/material.zig6
-rw-r--r--src/rtw/perlin.zig17
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;