Slide 38
Slide 38 text
• SmallPT
レイトレやってみる
https://github.com/kishida/smallpt4j/blob/vector/src/main/java/naoki/smallpt/SmallPT.java
public class SmallPT {
private static final int SAMPLES_DEFAULT = 40;
private static final VectorSpecies SPECIES = DoubleVector.SPECIES_256;
static DoubleVector fromValues(double x, double y, double z) {
return DoubleVector.fromArray(SPECIES, new double[]{x, y, z, 0}, 0);
}
static DoubleVector normalize(DoubleVector v) {
double dist = sqrt(v.mul(v).reduceLanes(VectorOperators.ADD));
return v.div(dist);
}
static double dot(DoubleVector v, DoubleVector b) {
return v.mul(b).reduceLanes(VectorOperators.ADD);
} // cross:
static VectorShuffle yzx = VectorShuffle.fromValues(SPECIES, 1, 2, 0, 3);
static DoubleVector mod(DoubleVector v, DoubleVector b) {
// return v.rearrange(yzx).mul(b.rearrange(zxy)).sub(v.rearrange(zxy).mul(b.rearrange(yzx)));
return v.mul(b.rearrange(yzx)).sub(v.rearrange(yzx).mul(b)).rearrange(yzx);
}