`facing3d.Rd`

`facing3d`

subsets an object by converting it to a triangle mesh,
then subsetting to those triangles that are counterclockwise
(for `front = TRUE`

) when projected into a plane.

`projectDown`

computes a projection that “looks down” the specified direction.

```
facing3d(obj, up = c(0, 0, 1),
P = projectDown(up),
front = TRUE, strict = TRUE)
projectDown(up)
```

- obj
An object that can be converted to a triangular mesh object.

- up
The direction that is to be considered “up”. It may be either a 3 vector in Euclidean coordinates or a 4 vector in homogeneous coordinates.

- P
The projection to use for draping, a 4x4 matrix. See

`drape3d`

for details on how`P`

is used.- front
If

`front = TRUE`

, retains triangles that are counterclockwise after projection by`P`

, otherwise retains those that are clockwise.- strict
If

`TRUE`

, drops indeterminate triangles (those that are annihilated by`P`

).

By default
the returned subset will be those triangles whose upper side
matches `front`

. Change `up`

or use an
arbitrary projection for different subsets.

`drape3d`

and `shadow3d`

project objects onto meshes; these functions can be used to
project only onto the top or front.

`facing3d`

returns a mesh object made of those triangles which face in the
desired direction.

`projectDown`

computes a 4x4 matrix. The first two
coordinates of `asEuclidean(x %*% projectDown(up))`

give a projection of `x`

from above into a plane, where
`up`

determines which direction is taken to be “up”.

```
open3d()
d <- rnorm(3)
d <- d/sqrt(sum(d^2))
shade3d( facing3d( icosahedron3d(), up = d, strict = FALSE),
col = "yellow")
wire3d( facing3d( icosahedron3d(), up = d, front = FALSE),
col = "black")
# Show the direction:
arrow3d(-2*d , -d)
```