All pastes #728099 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-10-06 18:02 UTC
rendered paste body
/* new vertex copies, internal to renderer */
typedef struct nV NVERTEX;
struct nV{
        LONG  x, y, z;          // viewport coordinates (to save time)
        LONG  xs, ys;           // screen coordinates
        LONG  tx, ty;                   // coordinates in source map (texmaps only of course)
        UCHAR outcode;          // XY clip outcodes
        UCHAR perspect;         // flags perspective done
        USHORT pad;                             // multiple of 4 bytes
};

#define LEFT   1  /* XY outcode bits */
#define RIGHT  2
#define TOP    4
#define BOTTOM 8

/* world database vertices */
/* object coords are referenced to object */
/* world coords are updated when moving or rotating object */
/* all others are renderer workspace */
typedef struct {
  LONG    ox, oy, oz;    // object coordinates
  LONG    x, y, z;       // world coordinates
  LONG    tx, ty;        // coordinates in source bitmap - my texmap mod ep 7/15/93
  LONG    cz;            // converted Z coord
  NVERTEX *new_copy;     // non-NULL if x and y transformed */
  UCHAR   z_outcode;     // 1 set if hither, 2 set if yon, 3 if transformed
  UCHAR   pad[3];                // make the struct a multiple of 4 bytes
} VERTEX;

#define HITHER      0x01    // Z outcode bits
#define YON         0x02
#define TRANSFORMED 0x04


// world database polys
// object-based normal must be rotated to world copy with object
#ifndef POLYDEF
#define POLYDEF 1
typedef struct {
  USHORT    color;          // color
  USHORT    npoints;        // number of vertices in this poly
  ULONG     pointsOffset;   // Offset from start of this poly
                            // for the array of indices to vertices
  LONG      onormalx,
            onormaly,
            onormalz;       // OBJECT surface normal unit vector
  LONG      normalx,
            normaly,
            normalz;        // WORLD surface normal unit vector
  struct _object *object;
} POLY;
#endif

// renderer poly copy
// parent points back to original poly for lighting
// color computed by cosine lighting (currently 0-15)
// maxz is deepest poly point for sorting
typedef struct {
  SHORT  npoints;       /* number of entries in points[] MUST BE FIRST */
  USHORT color;         /* color after illumination */
  POLY  *parent;
  LONG   maxz;          /* maximum Z value (for sorting) */
} NPOLY;

typedef struct {
  NPOLY *ptr;
  LONG depth;
} DSORT;                // used for depth sorting
#ifndef REPDEF
#define REPDEF 1
//  structure that defines one representation of an object
typedef struct _rep {
  LONG    size;             // use this rep when the object is bigger than this
  SHORT   nverts;           // number of vertices
  SHORT   npolys;           // number of polygons
  ULONG   polyOffset;       // Offset of polygon table from start of rep

#define  REPVERT(r,i)    (((VERTEX *) ((REP *) (r) + 1))[(i)])
#define  REPPOLY(r,i)    (((POLY *) ((unsigned char *) (r) + ((REP *) (r))->polyOffset))[(i)])
#define  POLYVERT(p,v,i) (((VERTEX *) (v))[((unsigned char *) (p))[(p)->pointsOffset + (i)]])
  struct _rep *next;        // pointer to next rep in list
  LONG    update_count;     // inc. every time rep moves
  USHORT  flags;
  USHORT  pad;              // make it a multiple of 4 bytes LONG
} REP;
#endif