package de.hauschild.gmltracer.tracer;
import java.util.List;
import org.apache.commons.math.geometry.Vector3D;
/**
* The base interface for all shapes describing object in the ray traced scene.
*
* @author Klaus Hauschild
* @since 1.0.0
*/
public interface Shape {
/**
* Gets the surface properties.
*
* @param intersection
* the intersection
* @return the surface properties
*/
SurfaceProperties getSurfaceProperties(final Vector3D intersection);
/**
* Tests for intersection between the ray and it self. If there is a intersection information about will be provided,
* <code>null</code> otherwise.
*
* @param ray
* the ray to test
* @return the intersection
*/
Intersection intersect(final Ray ray);
/**
* Tests for intersection between the ray and it self. If there is a intersection information about will be provided,
* <code>null</code> otherwise. All shapes contained in the given list will be ignored for the intersection test.
*
* @param ray
* the ray to test
* @param shapesToIgnore
* the shapes to ignore
* @return the intersection
*/
Intersection intersect(final Ray ray, final List<Shape> shapesToIgnore);
/**
* Rotates the shape around the x-axis.
*
* @param degrees
* the degrees to rotate
*/
void rotateX(final double degrees);
/**
* Rotates the shape around the y-axis.
*
* @param degrees
* the degrees to rotate
*/
void rotateY(final double degrees);
/**
* Rotates the shape around the z-axis.
*
* @param degrees
* the degrees to rotate
*/
void rotateZ(final double degrees);
/**
* Scales the shape by the given values in x-, y- and z-direction.
*
* @param x
* the value of x-scaling
* @param y
* the value of y-scaling
* @param z
* the value of z-scaling
*/
void scale(final double x, final double y, final double z);
/**
* Translates the shape by the given values in x-, y- and z-direction.
*
* @param x
* the value of x-translation
* @param y
* the value of y-translation
* @param z
* the value of z-translation
*/
void translate(final double x, final double y, final double z);
/**
* Scales the shape by the given values uniformly in all directions.
*
* @param scale
* the value of uniform scaling
*/
void uniformScale(final double scale);
}
|