Use backtick code blocks for syntax highlighting
This commit is contained in:
parent
8ed9dea394
commit
f658bfbb40
203 changed files with 26546 additions and 25801 deletions
166
51-06.md
166
51-06.md
|
|
@ -12,88 +12,90 @@ pages: 965-967
|
|||
|
||||
**LISTING 51.5 POLYGON.H**
|
||||
|
||||
/* POLYGON.H: Header file for polygon-filling code, also includes a number of
|
||||
useful items for 3D animation. */
|
||||
#define MAX_POLY_LENGTH 4 /* four vertices is the max per poly */
|
||||
#define SCREEN_WIDTH 320
|
||||
#define SCREEN_HEIGHT 240
|
||||
#define PAGE0_START_OFFSET 0
|
||||
#define PAGE1_START_OFFSET (((long)SCREEN_HEIGHT*SCREEN_WIDTH)/4)
|
||||
/* Ratio: distance from viewpoint to projection plane / width of projection
|
||||
plane. Defines the width of the field of view. Lower absolute values = wider
|
||||
fields of view; higher values = narrower. */
|
||||
#define PROJECTION_RATIO -2.0 /* negative because visible Z coordinates are negative */
|
||||
/* Draws the polygon described by the point list PointList in color Color with
|
||||
all vertices offset by (X,Y) */
|
||||
#define DRAW_POLYGON(PointList,NumPoints,Color,X,Y) \
|
||||
Polygon.Length = NumPoints; Polygon.PointPtr = PointList; \
|
||||
FillConvexPolygon(&Polygon, Color, X, Y);
|
||||
/* Describes a single 2D point */
|
||||
struct Point {
|
||||
int X; /* X coordinate */
|
||||
int Y; /* Y coordinate */
|
||||
};
|
||||
/* Describes a single 3D point in homogeneous coordinates */
|
||||
struct Point3 {
|
||||
double X; /* X coordinate */
|
||||
double Y; /* Y coordinate */
|
||||
double Z; /* Z coordinate */
|
||||
double W;
|
||||
};
|
||||
/* Describes a series of points (used to store a list of vertices that
|
||||
describe a polygon; each vertex is assumed to connect to the two adjacent
|
||||
vertices, and the last vertex is assumed to connect to the first) */
|
||||
struct PointListHeader {
|
||||
int Length; /* # of points */
|
||||
struct Point * PointPtr; /* pointer to list of points */
|
||||
};
|
||||
/* Describes beginning and ending X coordinates of a single horizontal line */
|
||||
struct HLine {
|
||||
int XStart; /* X coordinate of leftmost pixel in line */
|
||||
int XEnd; /* X coordinate of rightmost pixel in line */
|
||||
};
|
||||
/* Describes a Length-long series of horizontal lines, all assumed to be on
|
||||
contiguous scan lines starting at YStart and proceeding downward (describes
|
||||
a scan-converted polygon to low-level hardware-dependent drawing code) */
|
||||
struct HLineList {
|
||||
int Length; /* # of horizontal lines */
|
||||
int YStart; /* Y coordinate of topmost line */
|
||||
struct HLine * HLinePtr; /* pointer to list of horz lines */
|
||||
};
|
||||
struct Rect { int Left, Top, Right, Bottom; };
|
||||
/* Structure describing one face of an object (one polygon) */
|
||||
struct Face {
|
||||
int * VertNums; /* pointer to vertex ptrs */
|
||||
int NumVerts; /* # of vertices */
|
||||
int Color; /* polygon color */
|
||||
};
|
||||
/* Structure describing an object */
|
||||
struct Object {
|
||||
int NumVerts;
|
||||
struct Point3 * VertexList;
|
||||
struct Point3 * XformedVertexList;
|
||||
struct Point3 * ProjectedVertexList;
|
||||
struct Point * ScreenVertexList;
|
||||
int NumFaces;
|
||||
struct Face * FaceList;
|
||||
};
|
||||
extern void XformVec(double Xform[4][4], double * SourceVec, double * DestVec);
|
||||
extern void ConcatXforms(double SourceXform1[4][4],
|
||||
double SourceXform2[4][4], double DestXform[4][4]);
|
||||
extern void XformAndProjectPoly(double Xform[4][4],
|
||||
struct Point3 * Poly, int PolyLength, int Color);
|
||||
extern int FillConvexPolygon(struct PointListHeader *, int, int, int);
|
||||
extern void Set320x240Mode(void);
|
||||
extern void ShowPage(unsigned int StartOffset);
|
||||
extern void FillRectangleX(int StartX, int StartY, int EndX,
|
||||
int EndY, unsigned int PageBase, int Color);
|
||||
extern void XformAndProjectPoints(double Xform[4][4],struct Object * ObjectToXform);
|
||||
extern void DrawVisibleFaces(struct Object * ObjectToXform);
|
||||
extern void AppendRotationX(double XformToChange[4][4], double Angle);
|
||||
extern void AppendRotationY(double XformToChange[4][4], double Angle);
|
||||
extern void AppendRotationZ(double XformToChange[4][4], double Angle);
|
||||
extern int DisplayedPage, NonDisplayedPage;
|
||||
extern struct Rect EraseRect[];
|
||||
```c
|
||||
/* POLYGON.H: Header file for polygon-filling code, also includes a number of
|
||||
useful items for 3D animation. */
|
||||
#define MAX_POLY_LENGTH 4 /* four vertices is the max per poly */
|
||||
#define SCREEN_WIDTH 320
|
||||
#define SCREEN_HEIGHT 240
|
||||
#define PAGE0_START_OFFSET 0
|
||||
#define PAGE1_START_OFFSET (((long)SCREEN_HEIGHT*SCREEN_WIDTH)/4)
|
||||
/* Ratio: distance from viewpoint to projection plane / width of projection
|
||||
plane. Defines the width of the field of view. Lower absolute values = wider
|
||||
fields of view; higher values = narrower. */
|
||||
#define PROJECTION_RATIO -2.0 /* negative because visible Z coordinates are negative */
|
||||
/* Draws the polygon described by the point list PointList in color Color with
|
||||
all vertices offset by (X,Y) */
|
||||
#define DRAW_POLYGON(PointList,NumPoints,Color,X,Y) \
|
||||
Polygon.Length = NumPoints; Polygon.PointPtr = PointList; \
|
||||
FillConvexPolygon(&Polygon, Color, X, Y);
|
||||
/* Describes a single 2D point */
|
||||
struct Point {
|
||||
int X; /* X coordinate */
|
||||
int Y; /* Y coordinate */
|
||||
};
|
||||
/* Describes a single 3D point in homogeneous coordinates */
|
||||
struct Point3 {
|
||||
double X; /* X coordinate */
|
||||
double Y; /* Y coordinate */
|
||||
double Z; /* Z coordinate */
|
||||
double W;
|
||||
};
|
||||
/* Describes a series of points (used to store a list of vertices that
|
||||
describe a polygon; each vertex is assumed to connect to the two adjacent
|
||||
vertices, and the last vertex is assumed to connect to the first) */
|
||||
struct PointListHeader {
|
||||
int Length; /* # of points */
|
||||
struct Point * PointPtr; /* pointer to list of points */
|
||||
};
|
||||
/* Describes beginning and ending X coordinates of a single horizontal line */
|
||||
struct HLine {
|
||||
int XStart; /* X coordinate of leftmost pixel in line */
|
||||
int XEnd; /* X coordinate of rightmost pixel in line */
|
||||
};
|
||||
/* Describes a Length-long series of horizontal lines, all assumed to be on
|
||||
contiguous scan lines starting at YStart and proceeding downward (describes
|
||||
a scan-converted polygon to low-level hardware-dependent drawing code) */
|
||||
struct HLineList {
|
||||
int Length; /* # of horizontal lines */
|
||||
int YStart; /* Y coordinate of topmost line */
|
||||
struct HLine * HLinePtr; /* pointer to list of horz lines */
|
||||
};
|
||||
struct Rect { int Left, Top, Right, Bottom; };
|
||||
/* Structure describing one face of an object (one polygon) */
|
||||
struct Face {
|
||||
int * VertNums; /* pointer to vertex ptrs */
|
||||
int NumVerts; /* # of vertices */
|
||||
int Color; /* polygon color */
|
||||
};
|
||||
/* Structure describing an object */
|
||||
struct Object {
|
||||
int NumVerts;
|
||||
struct Point3 * VertexList;
|
||||
struct Point3 * XformedVertexList;
|
||||
struct Point3 * ProjectedVertexList;
|
||||
struct Point * ScreenVertexList;
|
||||
int NumFaces;
|
||||
struct Face * FaceList;
|
||||
};
|
||||
extern void XformVec(double Xform[4][4], double * SourceVec, double * DestVec);
|
||||
extern void ConcatXforms(double SourceXform1[4][4],
|
||||
double SourceXform2[4][4], double DestXform[4][4]);
|
||||
extern void XformAndProjectPoly(double Xform[4][4],
|
||||
struct Point3 * Poly, int PolyLength, int Color);
|
||||
extern int FillConvexPolygon(struct PointListHeader *, int, int, int);
|
||||
extern void Set320x240Mode(void);
|
||||
extern void ShowPage(unsigned int StartOffset);
|
||||
extern void FillRectangleX(int StartX, int StartY, int EndX,
|
||||
int EndY, unsigned int PageBase, int Color);
|
||||
extern void XformAndProjectPoints(double Xform[4][4],struct Object * ObjectToXform);
|
||||
extern void DrawVisibleFaces(struct Object * ObjectToXform);
|
||||
extern void AppendRotationX(double XformToChange[4][4], double Angle);
|
||||
extern void AppendRotationY(double XformToChange[4][4], double Angle);
|
||||
extern void AppendRotationZ(double XformToChange[4][4], double Angle);
|
||||
extern int DisplayedPage, NonDisplayedPage;
|
||||
extern struct Rect EraseRect[];
|
||||
```
|
||||
|
||||
### A Note on Rounding Negative Numbers {#Heading6}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue