use of suite.math.R3 in project suite by stupidsing.
the class Sphere method c.
public static RtObject c(R3 center, double radius, Material material) {
R3 radiusRange = new R3(radius, radius, radius);
R3 min = R3.sub(center, radiusRange);
R3 max = R3.add(center, radiusRange);
return new BoundingBox(min, max, new Sphere(center, radius, material));
}
use of suite.math.R3 in project suite by stupidsing.
the class Parallelogram method c.
public static RtObject c(R3 origin, R3 axis0, R3 axis1, Material material) {
R3 v0 = R3.add(origin, axis0);
R3 v1 = R3.add(origin, axis1);
R3 v2 = R3.add(origin, R3.add(axis0, axis1));
Parallelogram parallelogram = new Parallelogram(origin, axis0, axis1, material);
return BoundingBox.bound(List.of(origin, v0, v1, v2), parallelogram);
}
use of suite.math.R3 in project suite by stupidsing.
the class Plane method hit.
@Override
public List<RayHit> hit(Ray ray) {
double denum = R3.dot(normal, ray.dir);
double adv;
if (MathUtil.epsilon < Math.abs(denum))
adv = (originIndex - R3.dot(normal, ray.startPoint)) / denum;
else
// treats as not-hit
adv = -1d;
double advance = adv;
if (RayTracer.negligibleAdvance < advance) {
RayHit rayHit = new RayHit() {
public double advance() {
return advance;
}
public RayIntersection intersection() {
R3 hitPoint = ray.hitPoint(advance);
return new RayIntersection() {
public R3 hitPoint() {
return hitPoint;
}
public R3 normal() {
return normal;
}
public Material material() {
return material;
}
};
}
};
return List.of(rayHit);
} else
return List.of();
}
use of suite.math.R3 in project suite by stupidsing.
the class Render method renderPixels.
public Image renderPixels(int width, int height, IntInt_Obj<R3> f) {
int nThreads = Constants.nThreads;
int[] txs = Ints_.toArray(nThreads + 1, i -> width * i / nThreads);
R3[][] pixels = new R3[width][height];
List<Thread> threads = //
Ints_.range(//
nThreads).map(t -> Thread_.newThread(() -> {
for (int x = txs[t]; x < txs[t + 1]; x++) for (int y = 0; y < height; y++) pixels[x][y] = f.apply(x, y);
})).toList();
Thread_.startJoin(threads);
Image image = new Image(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) {
R3 pixel = limit(pixels[x][y]);
image.setRGB(x, y, new Color(pixel.x, pixel.y, pixel.z).getRGB());
}
return image;
}
use of suite.math.R3 in project suite by stupidsing.
the class Render method render.
public Image render(int width, int height, BiFun<Float, R3> f) {
float scale = 1f / max(width, height);
int centerX = width / 2, centerY = height / 2;
float[] xs = Floats_.toArray(width + 1, x -> (x - centerX) * scale);
float[] ys = Floats_.toArray(height + 1, y -> (y - centerY) * scale);
return renderPixels(width, height, (IntInt_Obj<R3>) (x, y) -> {
R3 color;
try {
color = f.apply(xs[x], ys[y]);
} catch (Exception ex) {
LogUtil.error(new RuntimeException("at (" + x + ", " + y + ")", ex));
color = new R3(1d, 1d, 1d);
}
return color;
});
}
Aggregations