40 lines
1.5 KiB
Java
40 lines
1.5 KiB
Java
package eu.jonahbauer.raytracing.scene;
|
|
|
|
import eu.jonahbauer.raytracing.math.Vec3;
|
|
import eu.jonahbauer.raytracing.render.renderer.pdf.TargetingProbabilityDensityFunction;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.util.random.RandomGenerator;
|
|
|
|
/**
|
|
* An interface for objects that can be targeted. A target can construct randomly distributed directions in which
|
|
* it will be hit from a given origin.
|
|
* @see TargetingProbabilityDensityFunction
|
|
*/
|
|
public interface Target extends Hittable {
|
|
/**
|
|
* Returns the probability density for a direction as sampled by {@link #getTargetingDirection(Vec3, RandomGenerator)}.
|
|
* @param origin the origin
|
|
* @param direction the direction
|
|
* @return the probability density for a direction as sampled by {@link #getTargetingDirection(Vec3, RandomGenerator)}
|
|
*/
|
|
double getProbabilityDensity(@NotNull Vec3 origin, @NotNull Vec3 direction);
|
|
|
|
/**
|
|
* {@return a vector targeting this hittable from the <code>origin</code>} The vector is chosen randomly.
|
|
* @param origin the origin
|
|
* @param random a random number generator
|
|
*/
|
|
@NotNull Vec3 getTargetingDirection(@NotNull Vec3 origin, @NotNull RandomGenerator random);
|
|
|
|
@Override
|
|
default @NotNull Target translate(@NotNull Vec3 offset) {
|
|
return (Target) Hittable.super.translate(offset);
|
|
}
|
|
|
|
@Override
|
|
default @NotNull Target rotateY(double angle) {
|
|
return (Target) Hittable.super.rotateY(angle);
|
|
}
|
|
}
|