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

📄 smooth.h

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 H
字号:
/* smooth.h *//* header file for polygon smoothing *//* Andrew S. Glassner / Xerox PARC */#include <stdio.h>#include <math.h>#ifdef STANDALONE_TEST#define NEWTYPE(x) (x *)malloc((unsigned)(sizeof(x)))typedef struct Point3Struct {   double x, y, z;   } Point3;typedef Point3 Vector3;typedef int boolean;#define TRUE  1#define FALSE 0Vector3 *V3Normalize(Vector3 *v);Vector3 *V3Add(Vector3 *a, Vector3 *b, Vector3 *c);double V3Dot(Vector3 *a, Vector3 *b);#else#include "GraphicsGems.h"#endif/********* MACROS and CONSTANTS *********//* new array creator */#define NEWA(x, num) (x *)malloc((unsigned)((num) * sizeof(x)))#define MARKWAITING    0#define MARKWORKING    1#define MARKDONE       2/* fuzzy comparison macro */#define FUZZEQ(x,y)  (fabs((x)-(y))<(smooth->fuzz))/* hash table size; related to HASH */#define HASH_TABLE_SIZE	       1000/* quantization increment */#define QSIZE	 1000.0#define QUANT(x)     (((int)((x)*QSIZE))/QSIZE)#define ABSQUANT(x)  (((int)((fabs(x))*QSIZE))/QSIZE)#define HASH(pt)     ( \		     (int)(((3*ABSQUANT(pt->x)) + \			    (5*ABSQUANT(pt->y)) + \			    (7*ABSQUANT(pt->z))) * \		      HASH_TABLE_SIZE)) % HASH_TABLE_SIZE/********* STRUCTS AND TYPES *********/typedef struct Polygonstruct {    Point3	*vertices;  /* polygon vertices */    Vector3	*normals;   /* normal at each vertex */    Vector3	normal;	    /* normal for polygon */    int		numVerts;   /* number of vertices */    void	*user;	    /* user information */    struct	Polygonstruct *next;    } Polygon_def;typedef Polygon_def *Polygon;typedef struct HashNodestruct {    Polygon   polygon;	    /* polygon for this vertex */    int	      vertexNum;    /* which vertex this is */    int	      marked;	    /* vertex status */    struct    HashNodestruct *next;    } HashNode_def;typedef HashNode_def *HashNode;typedef struct SmoothStruct {    HashNode  hashTable[HASH_TABLE_SIZE];    Polygon   polygonTable;    Polygon   polyTail;    double    fuzz;	      /* distance for vertex equality */    double    fuzzFraction;   /* fraction of model size for fuzz */    boolean   edgeTest;	      /* apply edging test using minDot */    float     minDot;	      /* if > this, make sharp edge; see above */    } Smooth_def;typedef Smooth_def *Smooth;/********* public procs ************/Smooth	 initAllTables();void	 includePolygon(int numVerts, Point3 *verts, Smooth smooth, void *user);void	 makeVertexNormals(Smooth smooth);/********* public option contorl procs ************/void	 setFuzzFraction(Smooth smooth, float fuzzFraction);void	 enableEdgePreservation(Smooth smooth, float minDot);void	 disableEdgePreservation(Smooth smooth);

⌨️ 快捷键说明

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