home *** CD-ROM | disk | FTP | other *** search
-
- /*** Routin of test for graphics3d.library **/
- /** SEE 3dlib.h also **/
-
- PROC main()
- DEF a3d:LONG
- DEF g:LONG
- DEF w:LONG
- DEF i:LONG
- DEF in:LONG
- DEF out:LONG
- DEF ob:LONG
- DEF np:LONG
- DEF d:LONG
- DEF s:LONG
- DEF cb:LONG
- DEF mode:LONG
- DEF c1:rgbtype
- DEF c2:rgbtype
- DEF vdist:LONG
- DEF gcolor:LONG
- DEF x0:LONG
- DEF y0:LONG
- DEF pjt:LONG
- DEF id:LONG
- DEF px:LONG
- DEF py:LONG
- DEF ay:LONG
- DEF ax:LONG
- DEF lx:LONG
- DEF ly:LONG
- DEF lz:LONG
- DEF il:LONG
- DEF vx:LONG
- DEF sx:LONG
- DEF ds:LONG
- DEF sl:LONG
- DEF fa:LONG
- DEF fd:LONG
- DEF fm:LONG
- DEF buf[100]:STRING
-
-
- WriteF('INIZIALIZZAZIONE ...\n')
-
- s:=OpenS(640,256,5,$8000,'TEST 3DLIBS VERS. IN E')
- IF s<=NIL THEN RETURN
-
- g:=start_es(s)
- IF g<=NIL
- CloseS(s)
- RETURN
- ENDIF
-
- w:=gad_w(g,20,20,550,180,'prova 3dlib',13)
-
- WriteF('window=\d\n',w)
-
- /** set mode cursor for object and initial light position **/
- fm:=0
- sl:=16
- il:=1*FIXV
- lx:=0
- ly:=0
- lz:=sl*9
- /********************************/
-
- /** OPEN AND INITIALIZE A NEW 3D SPACE **/
- a3d:=display3d(w,0,0,350,150,300)
- IF a3d=NIL THEN JUMP abort_b
- /***************************************/
-
- /** TEST FUNCTION INTEGER <-> FIXPOINT ***/
- i:=12
- WriteF('i2f=\d\n',Gd_int2fix({i},{out}))
- WriteF('f2i=\d\n',Gd_fix2int({out},{in}))
- WriteF('orig=\d int=\d fix=\d \n',i,in,out)
- /****************************************/
-
- /** DEFINE TWO SFUMATE COLOURS, FOR FLAT SHADING **/
- c1.r:=0
- c1.g:=0
- c1.b:=0
- c2.r:=15
- c2.g:=8
- c2.b:=0
- Gd_touchpalette(a3d,16,30,c1,c2)
- c1.r:=0
- c1.g:=0
- c1.b:=0
- c2.r:=0
- c2.g:=8
- c2.b:=15
- Gd_touchpalette(a3d,1,15,c1,c2)
- /**************************************************/
-
- /** SET DEFAULT SOLID SHADING **/
- cb:=1
- mode:=SOLID
- /*******************************/
-
- /** DEFINE A NEW ASPECT RATIO FOR A 640x256 SCREEN **/
- Gd_aspectratio(a3d,FIXV/2)
- /****************************************************/
-
- /** CREATE AND POSITION OF #1 OBJECT *****/
- WriteF('Leggo #1 oggetto...\n')
- i:=plgloadobject(a3d,'rad.plg',1*FIXV)
- IF i<>0 THEN Gd_positionobject(a3d,500*FIXV,0,560*FIXV)
-
- /** CREATE AND POSITION OF 2# OBJECT *****/
- WriteF('Leggo #2 oggetto...\n')
- i:=plgloadobject(a3d,'sfera.plg',2*FIXV)
- IF i<>0 THEN Gd_positionobject(a3d,200*FIXV,10*FIXV,800*FIXV)
-
- /** CREATE AND POSITION OF #3 OBJECT *****/
- WriteF('Leggo #3 oggetto...\n')
- i:=plgloadobject(a3d,'cube.plg',1*FIXV)
- IF i<>0 THEN Gd_positionobject(a3d,0,0,100*FIXV)
-
- /** CREATE AND POSITION OF #4 OBJECT *****/
- WriteF('Leggo #4 oggetto...\n')
- plgloadobject(a3d,'pyramid.plg',2*FIXV)
- IF i<>0 THEN i:=Gd_positionobject(a3d,400*FIXV,0,750*FIXV)
- /*****************************************/
-
- Gd_frustum(a3d,-500,16000) /* CHANGE SOME SETTINGS */
- Gd_clipmode(a3d,ZPLANE) /* EITHER #FRUSTUM OR #ZPLANE */
- Gd_createlightsource(a3d,lx,ly,lz) /* PLACE THE LIGHT SOURCES */
- Gd_ambientlight(a3d,il) /* SET THE INITIAL LIGHT INTENSITY */
- Gd_positioncamera(a3d,0,0,-800*FIXV)
- /* CAMERA AT SOME HEIGHT OFF THE GROUND */
-
- /** SET OFF ALL SCENE 3D PARAMETERS **/
- /** CHANGE COLOUR OF VISUALIZATION BOX **/
- gcolor:=4
- /** CHANGE OBSERVER DISTANCE **/
- vdist:=200
- /** CHANGE BOX ORIGIN **/
- x0:=10
- y0:=10
- /** CHANGE TYPE OF PROJECTION (experimental) **/
- pjt:=PARAL_P
-
- WriteF('cp. esi=\d\n',Gd_cascene(a3d,[ CS_GCOLOR,gcolor,
- CS_VDIST,vdist,
- CS_NPX0,x0,
- CS_NPY0,y0,
- END_T,NIL]:tag3d))
- /*****************************************/
-
- /*** RECALC THE VIEWING ***/
- Gd_newview(a3d)
- /*** REDRAW THE VIEWING ***/
- Gd_paintframe(a3d)
- /*** VISUALIZING THE VIEWING ***/
- Gd_switch_rp(a3d)
-
- mouse_ON(g)
-
- IF fm=0 THEN StringF(buf,'objects')
- IF fm=1 THEN StringF(buf,'lights ')
- TextF(380,60,'c_mode :\s',buf)
- TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
- TextF(380,80,'light int.:\d ',il)
-
- ay:=0
- ax:=90
- vx:=0
- sx:=FIXV
- ds:=Shr(FIXV,4)
- d:=0
- ob:=-1
- WHILE (pause(g)=NIL)
- fa:=0
- d:=0
- i:=inkey(g)
- SELECT i
- /** switch object-light mode cursor **/
- CASE "l"
- fm:=fm+1
- IF fm>1 THEN fm:=0
- fa:=1
- /** SWITCH ON-OFF POLIGONS BORDER ***/
- CASE "b"
- IF cb=1 THEN cb:=-1 ELSE cb:=1
- Gd_changeviewmode(a3d,mode,cb)
- /** SET WIRE FRAME SHADING ***/
- CASE "w"
- mode:=WIREF
- Gd_changeviewmode(a3d,mode,cb)
- /** SET SOLID SHADING **/
- CASE "s"
- mode:=SOLID
- Gd_changeviewmode(a3d,mode,cb)
- /** SET FLAT SHADING **/
- CASE "f"
- mode:=FLAT
- Gd_changeviewmode(a3d,mode,cb)
- CASE CDE
- IF fm=NIL
- ay:=ay+2
- ELSE
- lx:=lx-sl
- ENDIF
- fa:=1
- CASE CSI
- IF fm=NIL
- ay:=ay-2
- ELSE
- lx:=lx+sl
- ENDIF
- fa:=1
- CASE CSU
- IF fm=NIL
- ax:=ax+2
- ELSE
- ly:=ly+sl
- ENDIF
- fa:=1
- CASE CGIU
- IF fm=NIL
- ax:=ax-2
- ELSE
- ly:=ly-sl
- ENDIF
- fa:=1
- CASE "i"
- IF fm=NIL
- sx:=sx+ds
- ELSE
- il:=il+(FIXV/2)
- IF il>(14*FIXV) THEN il:=14*FIXV
- ENDIF
- fa:=1
- CASE "o"
- IF fm=NIL
- sx:=sx-ds
- IF sx<=0 THEN sx:=sx+ds ELSE fa:=1
- ELSE
- il:=il-(FIXV/2)
- IF il<0 THEN il:=0
- fa:=1
- ENDIF
- CASE "8"
- /** MOVE THE VIEWER TO THE SCREEN ***/
- IF fm=0
- d:=40*FIXV
- Gd_moveforward(a3d,d)
- ELSE
- lz:=lz+sl
- fa:=1
- ENDIF
- CASE "2"
- /** MOVE THE VIEWER FROM THE SCREEN ***/
- IF fm=0
- d:=-40*FIXV
- Gd_moveforward(a3d,d)
- ELSE
- lz:=lz-sl
- fa:=1
- ENDIF
- CASE "4"
- /** CHANGE THE ANGLE OF VIEW TO LEFT **/
- vx:=vx+1
- Gd_viewangle(a3d,0,vx,0)
- CASE "6"
- /** CHANGE THE ANGLE OF VIEW TO RIGHT **/
- vx:=vx-1
- Gd_viewangle(a3d,0,vx,0)
- ENDSELECT
-
- np:=mouse(g)
- IF np=1
- px:=mouseX(g)
- py:=mouseY(g)
- TextF(380,20,'oggetto id# ',ob)
- TextF(380,30,'poligono n# ',np)
- TextF(380,40,'Ax=\d Ay=\d sx=\d ',ax,ay,sx)
- TextF(380,50,'X=\d y=\d ',px,py)
- /** TEST IF AT POINT(px,py) IS PRESENT A POLIGON AND AN OBJECT **/
- ob:=Gd_pickobj(a3d,{np},px,py)
- IF ob>NIL
- TextF(380,20,'oggetto id#\d ',ob)
- TextF(380,30,'poligono n#\d ',np)
- ENDIF
- ENDIF
-
- IF fa
- IF fm=0 THEN StringF(buf,'objects')
- IF fm=1 THEN StringF(buf,'lights ')
- TextF(380,60,'c_mode :\s',buf)
- IF (fm=0) AND (ob>0)
- /** SET THE TRASFORMATION TO THE EVENTUALLY PICKED OBJECT **/
- TextF(380,40,'Ax=\d Ay=\d sx=\d ',ax,ay,sx)
- Gd_setobj(a3d,ob)
- Gd_rotateobject(a3d,ax,0,ay)
- Gd_scaleobject(a3d,sx,sx,sx)
- ENDIF
- IF fm
- /** CHANGE LIGHT POSITION **/
- TextF(380,70,'x=\d y=\d z=\d ',lx,ly,lz)
- Gd_createlightsource(a3d,lx,ly,lz)
- /** CHANGE LIGHT INTENSITY **/
- TextF(380,80,'light int.:\d ',il)
- Gd_ambientlight(a3d,il)
- ENDIF
- ENDIF
- IF i>=NIL
- /*** RECALC THE VIEWING ***/
- Gd_newview(a3d)
- /*** REDRAW THE VIEWING ***/
- Gd_paintframe(a3d)
- /*** VISUALIZING THE VIEWING ***/
- Gd_switch_rp(a3d)
- ENDIF
- ENDWHILE
-
- WriteF('termino.. \n')
- /** CLOSE AND DESTROY ALL DEFINITION CREATE BY display3d **/
- abort_b:
- close_display3d(a3d)
- gad_cw(g)
- end(g,1)
- CloseS(s)
-
- ENDPROC
-