Author Topic: 3D Vector Text System  (Read 2660 times)

0 Members and 1 Guest are viewing this topic.

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17409
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
3D Vector Text System
« on: January 19, 2010 »
This routine was used in Nzo's coppermaster remake, it allows you to have 2D flatshaded objects and zoom them in and out and pan them around.

Since the remake didn't require rotations and it was done in a rush, these are not yet implimented.
I put the 7 objects from the demo in this example, use f1 - f7 to change the object.

If you use this a credit to dbfinteractive.com would be cool :)

Code: [Select]
'*******************************************************************************
'*
'*  VECTOR FUNCTIONS (V 1.0) CODED FOR NZO BY SHOCKWAVE 2010
'*
'*  BE CAREFUL OF DIVISIONS BY ZERO AND OUT OF DATA ERRORS.
'*
'*  TO ADD AN OBJECT, CREATE A LABEL AT THE END OF THE CODE.
'*  EG: OBJECT1:
'*      OBJECT2:
'*      OBJECT3: ETC...
'*
'*  ADD VERTEX DATA FIRST.
'*  DATA X,Y,Z , X,Y,Z , X,Y,Z , X,Y,Z ETC..
'*  ADD FACE DATA NEXT.
'*  DATA 1,2,3 (CONNECT POINTS 1,2,3)
'*  DATA 3,4,1 (CONNECT POINTS 3,4,1)
'*
'*  GO TO THE SUB INITIALISE_OBJECT()
'*  AND LOCATE THE CASE STATEMENTS.
'*  ADD A NEW CONDITION. EG:
'*
'*        CASE 3
'*        VERT_READ=130:' 130 VERTICES IN OBJECT
'*        FACE_READ=51 :' 51  FACES IN OBJECT
'*
'* THAT TELLS THE PROGRAM THAT OBJECT 3 HAS 130 X,Y,Z TRIPLES AND 51 POLYGONS.
'*
'* TO USE YOUR OBJECT..
'* RESTORE OBJECT3: (MUST BE CALLED FROM MAIN PROGRAM). TO SET THE DATA POINTER IN THE RIGHT PLACE.
'* INITIALISE_OBJECT(3) (THIS LOADS YOUR OBJECT)
'* YOU MAY NOW DRAW YOUR OBJECT ON SCREEN:
'* DRAW_OBJECT (X,Y,Z,RGB(RR,GG,BB))
'*
'*------------------------------------------------------------------------------
'* THE OBJECT DATA AND DRAW CO-ORDINATES MAY BE EXPRESSED AS FLOATING POINT NUMBERS.
'* YOU SHOULD NOT TRY AND DRAW ANYTHING AT A Z POS OF 0
'* USE THE SCALE VARIABLES TO STRETCH EACH AXIS ALLOWING YOU TO TWEAK THE LOOK OF THE LETTERS.
'* POLYGONS ARE CLIPPED TO SCREEN BOUNDARIES SET BY XRES AND YRES
'*------------------------------------------------------------------------------
'*
'* PLANNED CHANGES...
'* ADD X,Y,Z ROTATION
'*
'*******************************************************************************



'-------------------------------------------------------------------------------
'   LIBS;
'-------------------------------------------------------------------------------
   
    #INCLUDE "TINYPTC_EXT.BI"
    #INCLUDE "WINDOWS.BI"
   
    OPTION STATIC
    OPTION EXPLICIT

'-------------------------------------------------------------------------------
'   800 * 600 SCREEN AND SCREEN BUFFER.
'-------------------------------------------------------------------------------
   
    CONST   XRES    =    800
    CONST   YRES    =    600
   
    DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )

'-------------------------------------------------------------------------------
'   DEFINITIONS FOR OBJECTS.
'-------------------------------------------------------------------------------

   
    DIM SHARED AS DOUBLE XSCALE,YSCALE,ZSCALE

    XSCALE=30.0:' HOW MUCH TO STRETCH X
    YSCALE=15.0:' HOW MUCH TO STRETCH Y
    ZSCALE=15.0:' HOW MUCH TO STRETCH Z

    DIM SHARED AS INTEGER VERTICES=1000:' INCREASE THESE IF YOU RUN OUT OF POINTS!
    DIM SHARED AS INTEGER FACES   =1000:'
   
    DIM SHARED AS INTEGER VERT_READ,FACE_READ:' STORES POINTS AND FACES IN OBJECT.
       
'-------------------------------------------------------------------------------
'   STORAGE FOR OBJECT 1
'-------------------------------------------------------------------------------
   
    DIM SHARED  AS INTEGER TX(VERTICES),TY(VERTICES): ' HOLDS TRANSFORMED OBJECT
    DIM SHARED AS DOUBLE OBJ_X(VERTICES):'  HOLDS RAW X CO-ORD
    DIM SHARED AS DOUBLE OBJ_Y(VERTICES):'  HOLDS RAW Y CO-ORD
    DIM SHARED AS DOUBLE OBJ_Z(VERTICES):'  HOLDS RAW Z CO-ORD
    DIM SHARED AS INTEGER CONNECT1(FACES):' POLY POINT 1
    DIM SHARED AS INTEGER CONNECT2(FACES):' POLY POINT 2
    DIM SHARED AS INTEGER CONNECT3(FACES):' POLY POINT 3
   
    DECLARE SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER)
    DECLARE SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER)
    DECLARE SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT)
   
    '
    RESTORE OBJECT1:'       SET OBJECT POINTER!
    INITIALISE_OBJECT(1):'  LOAD OBJECT!
   
'-------------------------------------------------------------------------------
'   OPEN THE SCREEN;
'-------------------------------------------------------------------------------
   
    PTC_ALLOWCLOSE(0)
    PTC_SETDIALOG(1,"COPPERMASTER VECTOR FUNCTIONS"+CHR$(13)+"FULL SCREEN?",0,1)               
    IF (PTC_OPEN("BY SHOCKWAVE",XRES,YRES)=0) THEN
        END-1
    END IF   
   
'*******************************************************************************
'*  MAIN LOOP;
'*******************************************************************************

    DIM GADD AS DOUBLE

WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE) 
   
        IF GETASYNCKEYSTATE(VK_F1)= -32767 THEN
                RESTORE OBJECT1:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(1):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F2)= -32767 THEN
                RESTORE OBJECT2:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(2):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F3)= -32767 THEN
                RESTORE OBJECT3:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(3):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F4)= -32767 THEN
                RESTORE OBJECT4:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(4):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F5)= -32767 THEN
                RESTORE OBJECT5:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(5):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F6)= -32767 THEN
                RESTORE OBJECT6:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(6):'  LOAD OBJECT!

        END IF
        IF GETASYNCKEYSTATE(VK_F7)= -32767 THEN
                RESTORE OBJECT7:'       SET OBJECT POINTER!
                INITIALISE_OBJECT(7):'  LOAD OBJECT!

        END IF
        DRAW_OBJECT(333*COS(GADD),333*SIN(GADD),7+6.99*SIN(GADD*5),RGB(55,100,155))
       
        PTC_UPDATE@BUFFER(0)
        ERASE BUFFER
        SLEEP 1
        GADD=GADD+.002

WEND

'*******************************************************************************
'*  EXIT.
'*******************************************************************************

EXITPROCESS(0)
 
'-------------------------------------------------------------------------------
'   SUBROUTINES.
'-------------------------------------------------------------------------------


SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT)
   
    DIM AS INTEGER L
    DIM AS DOUBLE RX,RY,RZ

'-------------------------------------------------------------------------------
'   CHOOSE AN OBJECT!
'-------------------------------------------------------------------------------
   
        SELECT CASE OBJECT_NUMBER
        CASE 1
            VERT_READ=70:' 70 VERTICES IN OBJECT
            FACE_READ=56:' 56 FACE IN OBJECT           
        CASE 2
            VERT_READ=34:' 34 VERTICES IN OBJECT
            FACE_READ=24:' 24 FACE IN OBJECT           
        CASE 3
            VERT_READ=79:' 79 VERTICES IN OBJECT
            FACE_READ=59:' 59 FACE IN OBJECT           
        CASE 4
            VERT_READ=61:' 61 VERTICES IN OBJECT
            FACE_READ=49:' 49 FACE IN OBJECT           
        CASE 5
            VERT_READ=70:' 70 VERTICES IN OBJECT
            FACE_READ=48:' 48 FACE IN OBJECT           
        CASE 6
            VERT_READ=78:' 78 VERTICES IN OBJECT
            FACE_READ=58:' 58 FACE IN OBJECT           
        CASE 7
            VERT_READ=42:' 42 VERTICES IN OBJECT
            FACE_READ=33:' 33 FACE IN OBJECT           

        CASE ELSE
        END SELECT   

    '---------------------------------------------------------------------------
    ' READ OBJECT
    '---------------------------------------------------------------------------

        '-----------------------------------------------------------------------
        ' VERTICES;
        '-----------------------------------------------------------------------
               
        FOR L=1 TO VERT_READ

            READ RX,RY,RZ
           
            OBJ_X(L) = RX*XSCALE
            OBJ_Y(L) = RY*YSCALE
            OBJ_Z(L) = RZ*ZSCALE
           
        NEXT

        '-----------------------------------------------------------------------
        'CONNECTIONS;
        '-----------------------------------------------------------------------       
       
        FOR L=1 TO FACE_READ
   
            READ CONNECT1(L)
            READ CONNECT2(L)
            READ CONNECT3(L)
           
        NEXT


   
END SUB

'*******************************************************************************
'*
'*  DRAW OBJECT : USAGE:
'*  DRAW_OBJECT ( X , Y , Z , COLOUR  )
'*  X,Y,Z (FLOATING POINT)
'*  COLOUR = &HRRGGBB
'*******************************************************************************

SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER)
   
   
    DIM AS INTEGER L
    DIM AS DOUBLE HALFX,HALFY
   
    HALFX = (XRES SHR 1)
    HALFY = (YRES SHR 1)
   
    '---------------------------------------------------------------------------
    ' TRANSFORM AND STORE POINTS;
    '---------------------------------------------------------------------------
   
    FOR L=1 TO VERT_READ
   
        TX(L)=((OBJ_X(L)+OX) / (OBJ_Z(L)+OZ))+HALFX
        TY(L)=((OBJ_Y(L)+OY) / (OBJ_Z(L)+OZ))+HALFY                                   

    NEXT

    '---------------------------------------------------------------------------
    ' DRAW THE OBJECT;
    '---------------------------------------------------------------------------

    FOR L=1 TO FACE_READ
                             
        TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC)
   
    NEXT
   
END SUB




SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER)
'-------------------------------------------------------------------------------
' FLAT TRIANGLE RENDERER BY SHOCKWAVE 2006.
'
' USAGE : TRIANGLE ( X1 , Y1 , X2 , Y2 , X3 , Y3 , &HRRGGBB)
' CLIPS TO SCREEN BOUNDARIES DEFINED AS XRES AND YRES.
'
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' WE NEED TO SORT THE POINTS INTO ORDER FROM TOP TO BOTTOM, EXCHANGE SORT IS OK.
' AS WE ONLY HAVE GOT 3 POINTS TO ARRANGE.
'-------------------------------------------------------------------------------

        DIM AS INTEGER TEMPX,TEMPY,LO,LI
        DIM AS INTEGER PX(3)
        DIM AS INTEGER PY(3)
        DIM TFLAG AS INTEGER
        DIM PP AS UINTEGER PTR
        DIM AS INTEGER IL1,IL2,SLICE
               
        TFLAG=0
        PX(1)= X1
        PX(2)= X2
        PX(3)= X3
       
        PY(1)= Y1
        PY(2)= Y2
        PY(3)= Y3

FOR LO = 1 TO 2
    FOR LI =1 TO 2     
        IF PY(LI+1) <= PY(LI) THEN
        TEMPX = PX(LI) : TEMPY = PY(LI)
        PX(LI) = PX(LI+1)
        PY(LI) = PY(LI+1)
        PX(LI+1) = TEMPX
        PY(LI+1) = TEMPY
        END IF   
    NEXT LI
NEXT LO

'-------------------------------------------------------------------------------
'   BOOT OUT INVISIBLE TRIANGLES!
'-------------------------------------------------------------------------------

    IF PX(1)<0 AND PX(2)<0  AND PX(3)< 0 THEN TFLAG=1
    IF PX(1)>XRES AND PX(2)>XRES  AND PX(3)>XRES THEN TFLAG=1
    IF PY(1)>YRES AND PY(2)>YRES  AND PY(3)>YRES THEN TFLAG=1
   
        DIM AS DOUBLE XP1,XP2:' SCREEN POSITIONS.
        DIM AS DOUBLE XI1,XI2:' INTERPOLATIONS.
       
'-------------------------------------------------------------------------------
'   REGULAR TRIANGLE (Y1<Y2 Y2<Y3)
'-------------------------------------------------------------------------------

IF PY(1)<PY(2) AND PY(2)<PY(3) or (PY(2) = PY(3)) THEN
    TFLAG=1
XP1 = PX(1)
XP2 = PX(1)
XI1 = (PX(1)-PX(2)) / (PY(2) - PY(1))
XI2 = (PX(1)-PX(3)) / (PY(3) - PY(1))

FOR LO = PY(1) TO PY(2)-1
   
IF LO>=0 AND LO<YRES THEN

    IF XP1<=XP2 THEN
        IL1=XP1
        IL2=XP2
    ELSE
        IL1=XP2
        IL2=XP1
    END IF
   
    IF IL2>XRES THEN IL2=XRES
    IF IL1<0 THEN IL1=0

    SLICE = IL2-IL1

IF SLICE>0 THEN
   
    PP = @BUFFER(IL1+(LO*XRES))   
    ASM
        MOV EAX,DWORD ptr[TC]
        MOV ECX, [SLICE]
        MOV EDI, [PP]
        REP STOSD
    END ASM
    END IF
   

END IF

XP1=XP1-XI1
XP2=XP2-XI2
NEXT

XI1 = (PX(2)-PX(3)) / (PY(3) - PY(2))
XP1 = PX(2)

FOR LO = PY(2) TO PY(3)
IF LO>=0 AND LO<YRES THEN
    IF XP1<=XP2 THEN
        IL1=XP1
        IL2=XP2
    ELSE
        IL1=XP2
        IL2=XP1
    END IF

    IF IL2>XRES THEN IL2=XRES
    IF IL1<0 THEN IL1=0

    SLICE = IL2-IL1
    IF SLICE>0 THEN         
    PP = @BUFFER(IL1+(LO*XRES))       
    ASM
        MOV EAX,DWORD ptr[TC]
        MOV ECX, [SLICE]
        MOV EDI, [PP]
        REP STOSD
    END ASM
 
    END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT

END IF


'-------------------------------------------------------------------------------
'   FLAT TOPPED TRIANGLE Y1=Y2
'-------------------------------------------------------------------------------

IF TFLAG=0 AND PY(1) = PY(2) THEN
   
        TFLAG=1
        XP1 = PX(1)
        XP2 = PX(2)
        XI1 = (PX(1)-PX(3)) / (PY(3) - PY(1))
        XI2 = (PX(2)-PX(3)) / (PY(3) - PY(2))
FOR LO = PY(1) TO PY(3)
 IF LO>=0 AND LO<YRES THEN
    IF XP1<=XP2 THEN
        IL1=XP1
        IL2=XP2
    ELSE
        IL1=XP2
        IL2=XP1
    END IF
   
    IF IL2>XRES THEN IL2=XRES
    IF IL1<0 THEN IL1=0
   
    SLICE = IL2-IL1
    IF SLICE>0 THEN
    PP = @BUFFER(IL1+(LO*XRES))       
    ASM
        MOV EAX,DWORD ptr[TC]
        MOV ECX, [SLICE]
        MOV EDI, [PP]
        REP STOSD
    END ASM
 
    END IF
END IF
    XP1=XP1-XI1
    XP2=XP2-XI2

NEXT
END IF
END SUB








OBJECT1:

'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70
' "BYE.BYE"
'VERTICES : 70
DATA -38,-9,0,-38,9,0,-28,9,0,-28,6,0,-31,0,0,-28,-6,0,-28,-9,0,-35,-6,0,-35,6,0,-31,6,0,-34,0,0,-31,-6,0,-26,-9,0,-23,5,0,-23,9,0,-19,9,0,-19,5,0,-16,-9,0
DATA -19,-9,0, -21,-1,0, -23,-9,0, -14,-9,0, -14,9,0, -4,9,0, -4,6,0, -11,6,0, -11,1,0, -6,1,0, -6,-1,0, -11,-1,0, -11,-6,0, -4,-6,0, -4,-9,0, -2,9,0
DATA -2,4,0,2,4,0,2,9,0,4,-9,0,4,9,0,14,9,0,14,6,0,11,0,0,14,-6,0,14,-9,0,7,-6,0,7,6,0,11,6,0,8,0,0,11,-6,0
DATA 16,-9,0,19,5,0,19,9,0,23,9,0,23,5,0,26,-9,0,23,-9,0,21,-1,0,19,-9,0,28,-9,0,28,9,0,38,9,0,38,6,0
DATA 31,6,0,31,1,0,36,1,0,36,-1,0,31,-1,0,31,-6,0,38,-6,0,38,-9,0
'FACES : 56
DATA 1,2,8,2,8,9,2,9,3,9,3,10
DATA 10,3,4,10,4,5,10,11,5,11
DATA 5,6,11,12,6,12,6,7,12,7,1,8,12,1
DATA 13,21,14,14,20,21,19,18,17,19,20,17,14,20,17,14,17,15,15,16,17
DATA 22,23,26,22,26,31,23,26,24,26,24,25,27,28,29,27,29,30,22,31,32,22,32,33
DATA 34,35,36,34,36,37
DATA 38,39,46,38,46,45,39,46,40,46,40,41,47,41,42,47,42,48,48,42,43,48,49,43,43,44,49,38,45,49,38,49,44
DATA 50,51,58,51,58,57,51,57,54,57,54,56,56,54,55,51,52,53,51,53,54
DATA 59,60,63,59,68,63,60,63,61,63,61,62,64,65,66,64,66,67,68,69,70,68,70,59


OBJECT2:

'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :34
'VERTICES: 34
DATA -21,-10,0,-19,1,0,-15,1,0,-13,-10,0,-19,5,0,-19,10,0,-15,10,0,-15,5,0,-11,-10,0
DATA -11,10,0,-8,10,0,-8,-7,0,-6,-7,0,-4,-4,0,-4,10,0,-1,10,0,-1,-7,0,-3,-10,0,1,-10,0,1,10,0,11,10,0,11,-10,0
DATA 4,-7,0,4,7,0,8,7,0,8,-7,0,13,-10,0,15,1,0,19,1,0
DATA 21,-10,0,15,5,0,15,10,0,19,10,0,19,5,0
' FACES: 24
DATA 1,2,3,1,3,4
DATA 5,6,7,5,7,8
DATA 9,10,11,9,11,12,9,12,18,12,18,13,13,18,17,13,17,14,14,17,15,15,16,17
DATA 19,20,24,19,24,23,24,20,21,24,21,25,21,22,25,22,25,26,22,19,26,19,23,26
DATA 27,28,29,27,29,30,31,32,33,31,33,34

OBJECT3:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :79
'VERTICES:79
DATA -44,-10,0,-44,10,0,-41,10,0,-41,-7,0,-40,-7,0,-40,10,0,-38,10,0,-38,-7,0,-37,-7,0,-37,10,0,-34,10,0,-34,-7,0,-37,-10,0
DATA -32,-10,0,-32,10,0,-29,10,0,-29,-7,0,-25,-7,0,-27,0,0,-25,7,0,-25,10,0,-22,10,0,-22,7,0,-24,0,0,-22,-7,0,-22,-10,0,-20,6,0
DATA -20,10,0,-16,10,0,-16,6,0,-14,-10,0,-11,10,0,-7,10,0,-4,-10,0,-6,-10,0,-9,6,0,-12,-10,0,-2,-10,0,-2,-6,0,2,-6,0,2,6,0,-2,6,0,-2,10,0,9,10,0
DATA 9,6,0,5,6,0,5,-6,0,9,-6,0,9,-10,0,11,-10,0,11,10,0,21,10,0,21,-2,0,18,-10,0,14,-7,0,14,7,0,18,7,0,18,-4,0,16,-7,0
DATA 23,-10,0,23,10,0,33,10,0,33,6,0,26,6,0,26,1,0,31,1,0,31,-1,0,26,-1,0,26,-6,0,33,-6,0,33,-10,0,35,-10,0
DATA 35,10,0,45,10,0,45,-10,0,38,-7,0,38,7,0,42,7,0,42,-7,0
'FACES:59
DATA 1,2,3,1,3,4,5,6,7,5,7,8,9,12,11,9,10,11,1,4,12,1,12,13
DATA 14,17,15,15,16,17,14,17,26,17,26,18,26,18,25,18,25,19,25,19,24,19,24,20,24,20,23,20,21,22,20,22,23,27,28,29,27,29,30
DATA 31,32,37,37,32,36,32,36,33,36,33,34,34,35,36
DATA 38,39,48,38,48,49,42,43,44,42,44,45,40,41,46,40,46,47
DATA 50,51,56,50,55,56,51,52,56,56,57,52,52,57,53,53,58,57,58,53,59,59,54,52,50,54,55,54,55,59
DATA 53,54,58
DATA 60,61,64,60,64,69,60,69,71,69,70,71,65,66,67,65,67,68,61,64,62,64,62,63
DATA 72,73,77,72,77,76,73,74,77,77,78,74,74,78,75,78,79,75,72,76,79,72,75,79


OBJECT4:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :61
'VERTICES : 61
DATA -35,-10,0,-35,10,0,-25,10,0,-25,7,0,-32,7,0,-32,-7,0,-25,-7,0,-25,-10,0
DATA -23,-10,0,-23,10,0,-13,10,0,-13,-10,0,-20,-7,0,-20,7,0,-16,7,0,-16,-7,0,-11,-10,0,-11,10,0
DATA -8,10,0,-8,5,0,-1,5,0,-1,-10,0,-8,-7,0,-8,2,0,-4,2,0,-4,-7,0,1,-10,0
DATA 1,10,0,4,10,0,4,5,0,11,5,0,11,-10,0,4,-7,0,4,2,0,8,2,0,8,-7,0
DATA 13,-10,0,13,10,0,24,10,0,24,7,0,16,7,0,16,1,0,22,1,0,22,-1,0,16,-1,0
DATA 16,-7,0,24,-7,0,24,-10,0,26,-10,0,26,10,0,29,10,0,29,-7,0,32,-7,0
DATA 30,0,0,32,7,0,32,10,0,35,10,0,35,7,0,33,0,0,35,-7,0,35,-10,0
'
' FACES : 49
DATA 1,2,5,1,6,5,2,3,4,2,4,5,1,8,6,6,8,7
DATA 9,10,14,9,14,13,10,11,14,14,15,11,15,11,12,15,12,16,9,12,13,13,12,16
DATA 17,18,19,17,23,19,20,21,25,24,20,25,21,22,25,25,26,22,17,22,23,22,23,26
DATA 37,38,41,37,41,46,37,46,48,46,47,48,38,39,40,38,40,41,42,43,44,42,44,45
DATA 49,50,51,49,51,52,49,52,53,49,53,61,61,60,53
DATA 53,54,59,59,60,53,54,55,58,54,58,59,55,56,57,55,57,58
DATA 27,28,29,27,33,29,30,31,34,34,35,31,31,32,35,35,36,32,27,32,36,27,33,36



OBJECT5:
'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70
'VERTICES: 70
DATA -35,-10,0,-35,10,0,-32,10,0,-32,-7,0,-31,-7,0,-31,10,0,-29,10,0,-29,-7,0,-28,-7,0,-28,10,0
DATA -25,10,0,-25,-7,0,-28,-10,0,-23,-10,0,-23,10,0,-20,10,0,-20,5,0,-16,5,0,-16,10,0,-13,10,0
DATA -13,-10,0,-20,-6,0,-20,1,0,-16,1,0,-16,-6,0,-11,-10,0,-11,2,0,-4,2,0,-4,6,0,-11,6,0
DATA -11,10,0,-1,10,0,-1,-2,0,-8,-2,0,-8,-6,0,-1,-6,0,-1,-10,0,1,-10,0,1,-6,0,4,-6,0
DATA 4,10,0,8,10,0,8,-6,0,11,-6,0,11,-10,0,13,-10,0,13,10,0,23,10,0,23,6,0
DATA 16,6,0,16,1,0,21,1,0,21,-1,0,16,-1,0,16,-6,0,23,-6,0,23,-10,0,25,-10,0,25,10,0
DATA 28,10,0,28,-7,0,32,-7,0,30,0,0,32,6,0,32,10,0,35,10,0,35,6,0,33,0,0,35,-7,0,35,-10,0
'FACES: 48
DATA 1,2,3,1,3,4,1,4,12,1,12,13,5,6,7,5,7,8,9,10,11,9,11,12
DATA 14,15,16,14,16,22,14,22,25,14,25,21,19,20,21,25,21,19,17,18,24,17,24,23
DATA 26,27,34,26,34,35,26,36,35,26,36,37,27,28,33,27,33,34,28,29,32,28,32,33,30,31,32,30,32,29
DATA 38,39,44,38,44,45,40,41,42,40,42,43
DATA 46,47,50,46,50,55,46,55,56,46,56,57,51,52,53,51,53,54,47,48,49,47,49,50
DATA 58,59,60,58,60,61,58,70,69,58,69,61,62,63,68,62,68,69,63,64,67,63,67,68,64,65,66,64,66,67

OBJECT6:

'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :78
DATA -41,-10,0,-41,10,0,-31,10,0,-31,7,0,-38,7,0,-38,-7,0,-31,-7,0,-31,-10,0,-29,-10,0,-29,10,0,-19,10,0,-19,-10,0
DATA -26,-7,0,-26,7,0,-22,7,0,-22,-7,0,-17,-10,0,-17,10,0,-14,10,0,-14,-7,0,-10,-7,0,-12,0,0,-10,6,0,-10,10,0
DATA -7,10,0,-7,6,0,-9,0,0,-7,-7,0,-7,-10,0,-5,-10,0,-5,2,0,2,2,0,2,6,0,-5,6,0,-5,10,0,5,10,0
DATA 5,-2,0,-2,-2,0,-2,-6,0,5,-6,0,5,-10,0,7,-10,0,7,10,0,10,10,0,10,5,0,14,5,0,14,10,0,17,10,0
DATA 17,-10,0,10,-7,0,10,1,0,14,1,0,14,-7,0,19,-10,0,19,-6,0,23,-6,0,23,6,0,19,6,0,19,10,0,29,10,0
DATA 29,6,0,25,6,0,25,-6,0,29,-6,0,29,-10,0,31,-10,0,31,10,0,34,10,0,34,-7,0,38,-7,0,36,0,0,38,6,0
DATA 38,10,0,41,10,0,41,6,0,39,0,0,41,-7,0,41,-10,0
'FACES: 58
DATA 1,2,5,1,5,6,1,6,7,1,7,8,2,3,4,2,4,5
DATA 9,10,14,9,13,14,9,13,16,9,16,12,10,11,14,14,11,15,11,12,15,15,12,16
DATA 17,18,19,17,19,20,17,20,28,17,28,29,21,28,27,21,27,22,22,23,26,22,26,27,23,24,25,23,26,25
DATA 30,31,38,30,38,39,30,39,40,30,40,41,31,32,37,31,37,38,32,33,36,32,36,37,33,34,35,33,35,36
DATA 42,43,44,42,44,50,42,50,53,42,53,49,47,48,49,47,49,53,45,46,52,45,51,52
DATA 54,55,64,54,64,65,56,57,62,56,62,63,58,59,60,58,60,61
DATA 66,67,68,68,69,66,69,77,78,66,69,78,70,71,76,70,76,77,71,72,75,71,75,76,72,73,74,72,74,75


OBJECT7:

'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :42
DATA -23,-10,0,-23,10,0,-20,10,0,-20,-7,0,-19,-7,0,-19,10,0,-17,10,0,-17,-7,0,-16,-7,0,-16,10,0,-13,10,0
DATA -13,-7,0,-16,-10,0,-11,-10,0,-11,10,0,-1,10,0,-1,-10,0,-8,-7,0,-8,7,0,-4,7,0,-4,-7,0
DATA 1,-10,0,1,10,0,11,10,0,11,6,0,8,0,0,11,-6,0,11,-10,0,4,-7,0,4,7,0,8,7,0,5,0,0,8,-7,0
DATA 13,-10,0,16,5,0,16,10,0,20,10,0,20,5,0,23,-10,0,20,-10,0,18,-2,0,16,-10,0
'FACES:33
DATA 1,2,3,1,3,4,1,4,12,1,13,12,5,6,7,5,7,8,9,10,11,9,11,12
DATA 14,15,19,14,19,18,14,18,21,14,21,17,15,16,19,19,16,20,20,21,17,20,16,17
DATA 22,23,30,22,29,30,22,29,27,22,27,28,23,24,25,23,30,25,33,27,26,26,32,33,31,32,26,31,26,25
DATA 34,35,42,41,42,35,38,39,40,38,40,41,35,38,41,35,36,37,35,37,38
Shockwave ^ Codigos
Challenge Trophies Won:

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17409
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: 3D Vector Text System
« Reply #1 on: January 19, 2010 »
Oh, and here's a very! basic editor (no apologies for this!)
See attachment..
Shockwave ^ Codigos
Challenge Trophies Won:

Offline rdc

  • Pentium
  • *****
  • Posts: 1495
  • Karma: 140
  • Yes, it is me.
    • View Profile
    • Clark Productions
Re: 3D Vector Text System
« Reply #2 on: January 19, 2010 »
FYI:

When compiled with -exx I am getting an out of bounds error at:

Code: [Select]
FOR L=1 TO FACE_READ
    TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC)
NEXT

This is in the object draw code.

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17409
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: 3D Vector Text System
« Reply #3 on: January 19, 2010 »
Thanks Rick. It's written on an old version of FB again (shame on me) and probably has bugs.
Shockwave ^ Codigos
Challenge Trophies Won: