This file is for programmers that would like to use this file format, to include them into their programs/demos. The purpose of this new object format is to provide an optimised object, for the different displaying modes, with expansion possi- bilities, and the needed informations for 3d-clipping, animation, and so on. The comments are preceded by a semi-colon: ;Here is the explanation of the different fileds: ;the length of the fields is given in bytes, in brackets. "3DX01" + '\0', Null terminated identifier. (6) ;Now we got three different descriptions of the object, depending ;on the distance viewer-object: there is no point of drawing ;120 faces that are not bigger than one pixel, because the object ;is too far away. ;Short range description: NOBJS_0 How many objects are there? (2) { NAME, A null terminated name for the object len(name + null char) <= 15 (15) NPTS, How many 3d points are there? (2) NFFCS, How many faces are there for the shaded faces representation? (2) NWFCS, How many faces are there for the wireframe representation? (2) ;The faces can have any number of vertices, they can be triangles, ;squares,... so we need to know, to know exactly how big the memory ;allocation should be, how big the sum of the number of vertices of ;every face is: ; if VFi,VWi is the number of vertices of the ith face for the ; shaded representation resp. the wireframe representation, then we ; need: NFOFFS, = VF1+VF2+...VFn , n=NFFCS (2) NWOFFS, = VW1+VW2+...VWn , n=NWFCS (2) ;Boundings of the object: XMAX,XMIN,YMAX,YMIN,ZMAX,ZMIN, (2 each=12) ;Coordinates (=Crd.) of the gravity center of the object: [Xg,Yg,Zg], (2 each=6) ;Crd. of the three light sources: [Xl,Yl,Zl]*3, (6*3=18) ;Crd. of the points of the object (points table): [X,Y,Z]*NPTS, (6*NPTS) ;Description of the shaded faces: [ COL, coulour of the face (2) NOFFS, # of vertices in the face (2) ;Here we have the description of the polygon. the ith OFFSET is the offset ;in the points table of the ith vertex. ;!!! Important !!! OFFSET is the offset of the *point* not the ;offset of the first coordinate: ; x1,y1,z1 <---- OFFSET == 0 ; x2,y2,z2 <---- OFFSET == 1, and not equal 6 (6 bytes further)! (OFFSET)*NFOFFS, (2*NFOFFS) (Nx,Ny,Nz), Normal vector of the face (2*3=6) (Xg,Yg,Zg), Gravity center of the face (2*3=6) ]*NFFCS, ;Description of the wireframe faces: [ NOFFS, # of vertices in the face (2) ;Here we need to know, for each vertex in the face, if there has to be ;a drawn line from the actual point to the next point in the list. ;Ex: ; 1 2 ; *---------------------------------* ; / Face 1 \ ; / \ ; 4*--This line should only be drawn once--*3 ; / / ; / Face 2 / ; *---------------------------------------* ;From point 3 to point 4, there'll be no line for face 1, so here, ;CONT=0 on point 3. "no line from 3 to 4" ;Description of Face1: ;NOFFS==4 ;(OFFSET==1,CONT==1) ;(OFFSET==2,CONT==1) ;(OFFSET==3,CONT==1) ;(OFFSET==4,CONT==0) ;and every line of Face2 is drawn. ;Of course, on situations like this: ; 1 2 ; *-----*---------------------------------* ; /Face / Face 1 \ ; / 3 / \ ;*----4*--This line should only be drawn once--*3 ; / / ; / Face 2 / ; *---------------------------------------* ;instead of having "no line from 3 to 4" and "no line from 4 to 1", ;the OFFSET 4 will simply not be present, so the face 1 will be: ;Description of Face1: ;NOFFS==3 ;(OFFSET==1,CONT==1) ;(OFFSET==2,CONT==1) ;(OFFSET==3,CONT==0) ;OFFSET has the same meaning as above. ;and every line of Face2 and Fcae3 is drawn. (OFFSET,CONT)*NWOFFS (4*NWOFFS) ]*NWFCS ;This additional zone is always structured this way (if not empty, ;that is, its length is 0): additional zone= [ -LEN length of additional zone (4) -a 9 BYTES, null terminated string identifier: ("BSPTREE" , "MAPTGA" ,"" (if empty)...) (9) -LEN bytes actual description of the zone -[additional zone] ;next additional zone (might be empty) ] }*NOBJS_0 ;The description of the medium and the long range objects is the same. NOBJS_1, {...}*NOBJS_1 NOBJS_2, {...}*NOBJS_2 Nikopol (Flatliner) Ok, that's it. If you have a good idea of an expansion to the format, please send it to me (with its format). My mail adresses are: email: lmuniz@vub.ac.be on internet smail: Luis Muniz 564 chaussee de Boondael B-1050 Brussels Belgium from august/september on: 54, rue Dillens B-1050 Brussels Belgium