Phong shading for a 3D body
Create phong shading for faces showing on the 3D block
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")
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 |
Uses a standard phong shading model based ont eh dot product of the face normal vector and direction of incoming light.
Graphical Side effect
Jonathan M. Lees<jonathan.lees@unc.edu>
Watt, Alan. Fundamentals of Three-dimensional Computer Graphics, Addison-Wesley, 1989, 430p.
makeblock3D, BOXarrows3D, PROJ3D, Z3Darrow, pglyph3D
########### 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")
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.