HowTo:Use the plane object

From POV-Wiki
Jump to navigation Jump to search

The Plane

In POV, a plane is one of the five Infinite Solid Primitives. It is a flat surface that extends infinitely in all directions (unless clipped by an object). Planes are considered to have a volume, any point that is "under" the plane is inside, and any point that is "above" the plane is outside. This becomes important when you use a plane in CSG. A plane is defined in POV by a normal vector, and a float distance. The normal vector indicates the surface normal of the plane, and the distance is how far in that direction from the origin the surface begins.

A Simple Plane

#include "colors.inc"
plane
{
    y, -1
    pigment {checker White Tan}
}

The resultant plane (a red arrow has been added to illustrate the normal vector).

Example #1: A simple plane.

This uses the default y vector for "up", it's easy enough to rotate a plane to the desired angles after creating it, but vrotate can be used to rotate the vector before defining the plane.

Modifying a Plane

We can use the clipped_by object modifier to render only the portion of the plane within the clipping shape. Note, though, that even though the plane is by default a solid shape, the rest of the plane does not "fill" the clipping shape: only the surface (or underside) of the plane is visible.

To have a plane "fill out" the clipping shape, we must place the plane and clipping shape inside of an intersection statement.

Example #2: Clipped plane vs. Intersected plane

In the above image, the plane section on the left is clipped by a sphere. The green and blue object on the right is an identical plane and sphere, intersected.


Full Source for Example #2

#include "colors.inc"


#declare Myfinish = 
finish
{
	specular  0.00
	roughness 1.00
	ambient   0.25
}


// our ground plane:
plane
{
	y, -1
	// this is identical to <0,1,0>, -1

	pigment
	{
		checker White Tan
	}

	finish
	{
		Myfinish
	}
}


// plane section on the left, using clipped_by:
plane
{
    y, 2

	clipped_by
	{
		sphere{ <-3,2,0>, 2 }
	}

	pigment
	{
		checker Black Red
	}

	finish
	{
		Myfinish
	}
}


// plane section on the right, using intersection:
intersection
{

plane
{
	y, 2
}

sphere
{
	<3,2,0>, 2
}

	pigment
	{
		checker Blue Green
	}

	finish
	{
		Myfinish
	}
}


light_source
{
	<0,0,0>
	color rgb <1,1,1>

translate <10,100,-100> * 10
}


camera
{
	location	<0,5,-12>
	look_at		<0,2,0>
}