R: Phong shading for a 3D body

phong3D {RFOC} | R Documentation

## Phong shading for a 3D body

### Description

Create phong shading for faces showing on the 3D block

### Usage

    phong3D(aglyph, M = diag(1, nrow = 4), M2 = diag(1, nrow = 4),
              Light = c(45, 45), anorms = list(), zee = c(0, 0, 1),
             col = "white", border = "black")

### Arguments

`aglyph` | 3-D body list of faces and normals
`M` | Rotation Matrix
`M2` | Viewing Matrix
`Light` | light source direction
`anorms` | normals to faces
`zee` | Up vector for Body
`col` | color for faces
`border` | border color for sides

### Details

Uses a standard phong shading model based ont eh dot product of the face normal vector and direction of incoming light.

### Value

Graphical Side effect

### Author(s)

Jonathan M. Lees<jonathan.lees@unc.edu>

### References

Watt, Alan. Fundamentals of Three-dimensional Computer Graphics, Addison-Wesley, 1989, 430p.

### See Also

makeblock3D, BOXarrows3D, PROJ3D, Z3Darrow, pglyph3D

### Examples

    ###########  create a block and rotation matrix, then color it
    ANG=(45)
    DEGRAD = pi/180

    y1 = 1.5

      y2 = y1 - 1/tan((ANG)*DEGRAD)

      z1 = 1
      x1 = 1

    Ablock1 = matrix(c(0,0,0,
        1,0,0,
        1,y1,0,
        0,y1,0,
        0,0,-1,
        1,0,-1,
        1,y2,-1,
        0,y2,-1), byrow=TRUE, ncol=3)

    Nblock1 = makeblock3D(Ablock1)
    Light=c(45,45)
    angz = -45
    angx = -45

    R1 = ROTZ(angz)
    R2 = ROTX(angx)

       M =    R1

    Z2 = PROJ3D(Nblock1$aglyph, M=M,  anorms=Nblock1$anorm ,  zee=c(0,0,1))
    RangesX = range(attr(Z2, "RangesX"))

      RangesY = range(attr(Z2, "RangesY"))

    plot( RangesX, RangesY, type='n', asp=1, ann=FALSE, axes=FALSE)

    phong3D(Nblock1$aglyph, M=M,  anorms=Nblock1$anorm , Light = Light,
    zee=c(0,0,1), col=rgb(.7,.5, .5)  , border="black")

[Package RFOC version 3.4-3 Index]