Package org.sunflow.core

## Interface PrimitiveList

- All Superinterfaces:
    `RenderObject`
  All Known Implementing Classes:
    `Background`, `BanchoffSurface`, `Box`, `CornellBox`, `CubeGrid`, `Cylinder`, `Hair`, `ImageBasedLight`, `JuliaFractal`, `ParticleSurface`, `Plane`, `QuadMesh`, `Sphere`, `SphereFlake`, `SunSkyLight`, `Torus`, `TriangleMesh`, `TriangleMeshLight`

      public interface PrimitiveList
      extends RenderObject

  This class represents an object made up of many primitives.

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `PrimitiveList` | `getBakingPrimitives()` | Create a new `PrimitiveList` object suitable for baking lightmaps.
    `int` | `getNumPrimitives()` | Returns the number of individual primtives in this aggregate object.
    `float` | `getPrimitiveBound​(int primID, int i)` | Retrieve the bounding box component of a particular primitive in object space.
    `BoundingBox` | `getWorldBounds​(Matrix4 o2w)` | Compute a bounding box of this object in world space, using the specified object-to-world transformation matrix.
    `void` | `intersectPrimitive​(Ray r, int primID, IntersectionState state)` | Intersect the specified primitive in local space.
    `void` | `prepareShadingState​(ShadingState state)` | Prepare the specified `ShadingState` by setting all of its internal parameters.

    - ### Methods inherited from interface org.sunflow.core.RenderObject

      `update`

- - ### Method Detail

    - #### getWorldBounds

          BoundingBox getWorldBounds​(Matrix4 o2w)

      Compute a bounding box of this object in world space, using the specified object-to-world transformation matrix. The bounds should be as exact as possible, if they are difficult or expensive to compute exactly, you may use `Matrix4.transform(BoundingBox)`. If the matrix is `null` no transformation is needed, and object space is equivalent to world space.
      Parameters:
        `o2w` - object to world transformation matrix
      Returns:
        object bounding box in world space

    - #### getNumPrimitives

          int getNumPrimitives()

      Returns the number of individual primtives in this aggregate object.
      Returns:
        number of primitives

    - #### getPrimitiveBound

          float getPrimitiveBound​(int primID,
                                  int i)

      Retrieve the bounding box component of a particular primitive in object space. Even indexes get minimum values, while odd indexes get the maximum values for each axis.
      Parameters:
        `primID` - primitive index
        `i` - bounding box side index
      Returns:
        value of the request bound

    - #### intersectPrimitive

          void intersectPrimitive​(Ray r,
                                  int primID,
                                  IntersectionState state)

      Intersect the specified primitive in local space.
      Parameters:
        `r` - ray in the object's local space
        `primID` - primitive index to intersect
        `state` - intersection state
      See Also:
        `Ray.setMax(float)`, `IntersectionState.setIntersection(int, float, float)`

    - #### prepareShadingState

          void prepareShadingState​(ShadingState state)

      Prepare the specified `ShadingState` by setting all of its internal parameters.
      Parameters:
        `state` - shading state to fill in

    - #### getBakingPrimitives

          PrimitiveList getBakingPrimitives()

      Create a new `PrimitiveList` object suitable for baking lightmaps. This means a set of primitives laid out in the unit square UV space. This method is optional, objects which do not support it should simply return `null`.
      Returns:
        a list of baking primitives