Make ores work

This commit is contained in:
codemob-dev 2025-07-28 17:09:32 -04:00
parent b154103c6b
commit 436d792544

View File

@ -202,7 +202,7 @@ pub const Model = struct {
return modelIndex; return modelIndex;
} }
fn ray_intersects_triangle(ray_origin: Vec3f, ray_direction: Vec3f, triangle: *const [3]Vec3f) bool { fn rayIntersectsTriangle(ray_origin: Vec3f, ray_direction: Vec3f, triangle: *const [3]Vec3f) bool {
const epsilon = 1e-8; const epsilon = 1e-8;
const v0 = triangle[0]; const v0 = triangle[0];
const v1 = triangle[1]; const v1 = triangle[1];
@ -248,26 +248,29 @@ pub const Model = struct {
for(Neighbor.iterable)|neighbor| { for(Neighbor.iterable)|neighbor| {
const dir: Vec3f = @floatFromInt(neighbor.relPos()); const dir: Vec3f = @floatFromInt(neighbor.relPos());
var intersections: usize = 0; var signed_intersections: i32 = 0;
for(modelQuads) |quad| { for(modelQuads) |quad| {
const triangle1: [3]Vec3f = .{ const triangle1: [3]Vec3f = .{
@as(Vec3f, quad.corners[0]), quad.cornerVec(0),
@as(Vec3f, quad.corners[1]), quad.cornerVec(1),
@as(Vec3f, quad.corners[2]), quad.cornerVec(2),
}; };
const triangle2: [3]Vec3f = .{ const triangle2: [3]Vec3f = .{
@as(Vec3f, quad.corners[1]), quad.cornerVec(1),
@as(Vec3f, quad.corners[2]), quad.cornerVec(2),
@as(Vec3f, quad.corners[3]), quad.cornerVec(3),
}; };
if(rayIntersectsTriangle(pos, dir, &triangle1) or rayIntersectsTriangle(pos, dir, &triangle2)) {
if(ray_intersects_triangle(pos, dir, &triangle1) or ray_intersects_triangle(pos, dir, &triangle2)) { if(vec.dot(dir, quad.normalVec()) > 0) {
intersections += 1; signed_intersections -= 1;
} else {
signed_intersections += 1;
}
} }
} }
if(intersections%2 == 1) { if(signed_intersections != 0) {
grid[x][y][z] = true; grid[x][y][z] = true;
break; break;
} }