SUBROUTINE INIT3D(MODE,EYE,NU,NV,NW,ST1,LX,NY,IS2,IU) DIMENSION EYE(3),ST1(NV,NW,2),IS2(LX,NY) C IF MODE=0 BACKING STORE IS FILLED FROM SCRATCH. C IF MODE=1 OR 2 FILE IS REWOUND AND ST1 CLEARED. C MODE 1 ALSO CALLS REGION AND SHOULD BE USED INSTEAD OF MODE 0 C IF BACKING STORE WAS DEFINED IN A PREVIOUS RUN WITH SAME SIZE C ARRAYS AND EYE POSITION. C REWIND IU IF(MODE.EQ.2) GOTO 2 C SET UP TRANSFORMATION ROUTINE FOR THIS LINE OF SIGHT U=NU V=NV W=NW CALL SETORG(U*.5,V*.5,W*.5,EYE(1),EYE(2),EYE(3)) CALL REGION(0.0,1.0,0.0,1.0) IF(MODE.EQ.1) GOTO 2 C FIND EXTREMES IN TRANSFORMED SPACE CALL PERSPC(1.0,1.0,W,D,YT) CALL PERSPC(U,V,1.0,D,YB) CALL PERSPC(U,1.0,1.0,XL,D) CALL PERSPC(1.0,V,1.0,XR,D) C ADJUST EXTREMES TO PREVENT DISTORTION WHEN GOING FROM C TRANSFORMED SPACE TO PLOTTER SPACE DIF=(XR-XL-YT+YB)*.5 IF(DIF) 10,30,20 10 XL=XL+DIF XR=XR-DIF GO TO 30 20 YB=YB-DIF YT=YT+DIF 30 C1=.9/(XR-XL) C3=.9/(YT-YB) C FIND THE PLOTTER COORDINATES OF THE 3-SPACE LATTICE POINTS DO 60 II=1,NU U=NU+1-II DO 50 J=1,NV V=J DO 40 K=1,NW CALL PERSPC (U,V,FLOAT(K),X,Y) ST1(J,K,1)=C1*(X-XL)+.05 ST1(J,K,2)=C3*(Y-YB)+.05 40 CONTINUE 50 CONTINUE C WRITE THEM ON UNIT IU WRITE (IU)(((ST1(I,J,K),I=1,NV),J=1,NW),K=1,2) 60 CONTINUE ENDFILE IU REWIND IU C ZERO OUT ARRAY WHERE VISIBILITY IS REMEMBERED 2 CALL ICLEAR(IS2,LX*NY) RETURN END