⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsp.h

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 H
字号:
/* bsp.h: header file for BSP tree algorithm * Copyright (c) Norman Chin  */#ifndef _BSP_INCLUDED#define _BSP_INCLUDED#include <stdio.h>		#include <stdlib.h>		/* exit() */#include <assert.h>		/* assert() */#include <math.h>		/* fabs() */#include <values.h>		/* MAXINT */#include "../ch7-7/GG4D/GGems.h"typedef struct { float rr,gg,bb; } COLOR;typedef struct { float xx,yy,zz; } POINT;typedef struct { float aa,bb,cc,dd; } PLANE;typedef struct vertexTag {   float xx,yy,zz;		/* vertex position */   struct vertexTag *vnext;	/* pointer to next vertex in CCW order */} VERTEX;#define NULL_VERTEX ((VERTEX *) NULL)typedef struct faceTag {   COLOR color;			/* color of face */   VERTEX *vhead;		/* head of list of vertices */   PLANE plane;			/* plane equation of face */   struct faceTag *fnext;	/* pointer to next face */} FACE;#define NULL_FACE ((FACE *) NULL)typedef enum {PARTITION_NODE= 'p', IN_NODE= 'i', OUT_NODE= 'o'} NODE_TYPE; typedef struct partitionnodeTag {   FACE *sameDir, *oppDir;	/* pointers to faces embedded in node */   struct bspnodeTag *negativeSide, *positiveSide; /* "-" & "+" branches */} PARTITIONNODE;#define NULL_PARTITIONNODE ((PARTITIONNODE *) NULL)typedef struct bspnodeTag {   NODE_TYPE kind;		/* kind of BSP node */   PARTITIONNODE *node; /* if kind == (IN_NODE || OUT_NODE) then NULL */} BSPNODE;#define NULL_BSPNODE ((BSPNODE *) NULL)#define TOLER 0.0000076#define IS_EQ(a,b) ((fabs((double)(a)-(b)) >= (double) TOLER) ? 0 : 1)typedef enum {NEGATIVE= -1, ZERO= 0, POSITIVE= 1} SIGN;#define FSIGN(f) (((f) < -TOLER) ? NEGATIVE : ((f) > TOLER ? POSITIVE : ZERO))/* external functions */BSPNODE *BSPconstructTree(FACE **faceList);boolean BSPisViewerInPositiveSideOfPlane(const PLANE *plane,const POINT *position);void BSPtraverseTreeAndRender(const BSPNODE *bspNode,const POINT *position);void BSPfreeTree(BSPNODE **bspNode);boolean BSPdidViewerCollideWithScene(const POINT *from, const POINT *to,				     const BSPNODE *bspTree);VERTEX *allocVertex(float xx,float yy,float zz);FACE *allocFace(const COLOR *color, VERTEX *vlist,const PLANE *plane);void appendVertex(VERTEX **vhead,VERTEX **vtail,VERTEX *vertex);void appendFace(FACE **fhead,FACE **ftail,FACE *face);void freeVertexList(VERTEX **vlist);void freeFaceList(FACE **flist);void computePlane(float xx0,float yy0,float zz0,float xx1,float yy1,float zz1,		  float xx2,float yy2,float zz2, PLANE *plane);SIGN anyEdgeIntersectWithPlane(float x1, float y1, float z1,			       float x2, float y2, float z2,			       const PLANE *plane,			       float *ixx, float *iyy, float *izz);void BSPpartitionFaceListWithPlane(const PLANE *plane,FACE **faceList,				   FACE **faceNeg, FACE **facePos,				   FACE **faceSameDir, FACE **faceOppDir);void drawFaceList(FILE *, const FACE *faceList); char *MYMALLOC(unsigned num);void MYFREE(char *ptr);long MYMEMORYCOUNT(void);#endif  /* _BSP_INCLUDED */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -