亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? patch.h

?? hl2 source code. Do not use it illegal.
?? H
?? 第 1 頁 / 共 2 頁
字號:
/**********************************************************************
 *<
	FILE: patch.h

	DESCRIPTION: Main include file for bezier patches

	CREATED BY: Tom Hudson

	HISTORY: Created June 21, 1995
			 June 17, 1997 TH -- Added second texture mapping channel
			 12-10-98 Peter Watje added hide interior edge support and hidding patches
			 12-31-98 Peter Watje added hook patches, patch extrusion and bevels

 *>	Copyright (c) 1995, All Rights Reserved.
 **********************************************************************/

#ifndef _PATCH_H_

#define _PATCH_H_

#include "coreexp.h"
#include "meshlib.h"
#include <hitdata.h>
#include "maxtess.h"

// Uncomment the following to check for missed triangular patch 'aux' computation
//#define CHECK_TRI_PATCH_AUX

// Handy-dandy integer table class
typedef Tab<int> IntTab;

// Value for undefined patches and vertices
#define PATCH_UNDEFINED -1

// TH 5/17/99 -- Commented out MULTI_PROCESSING, it wasn't being used and was causing
// am obscure memory leak (Defect 180889)
//#define MULTI_PROCESSING	TRUE		// TRUE turns on mp vertex transformation

class HookPoint 
	{
public:
	int upperPoint, lowerPoint;
	int upperVec,lowerVec;
	int upperHookVec, lowerHookVec;
	int hookPoint;
	int upperPatch, lowerPatch, hookPatch;
	int hookEdge, upperEdge, lowerEdge;
	};

class ExtrudeData
{
public:
	int u,l,uvec,lvec;
//3-10-99 watje
	Point3 edge;
	Point3 bevelDir;
};

class ISave;
class ILoad;
class PatchMesh;

#define NEWPATCH

// PRVertex flags: contain clip flags, number of normals at the vertex
// and the number of normals that have already been rendered.
// fine PLANE_MASK	0x00003f00UL -- now in gfx.h
#define NORCT_MASK			0x000000ffUL
#define SPECIFIED_NORMAL	0x00004000UL
#define OUT_LEFT			0x00010000UL
#define OUT_RIGHT			0x00020000UL
#define OUT_TOP				0x00040000UL
#define OUT_BOTTOM			0x00080000UL
#define RECT_MASK			0x000f0000UL
#define RND_MASK			0xfff00000UL
#define RND_NOR0			0x00100000UL
#define RND_NOR(n)  		(RND_NOR0 << (n))

class PRVertex {
	public:
		PRVertex()	{ rFlags = 0; /*ern = NULL;*/ }
		CoreExport ~PRVertex();	

		DWORD		rFlags;     
		int			pos[3];	
	};					  

// Patch vector flags
#define PVEC_INTERIOR	(1<<0)

// Patch vectors

class PatchVec {
	public:
		Point3 p;			// Location
		int vert;			// Vertex which owns this vector
		int patches[2];		// Patches using this vector
		DWORD flags;
		int aux1;			// Used to track topo changes during editing (Edit Patch)
		int aux2;			// Used to track topo changes during editing (PatchMesh)
		CoreExport PatchVec();
		CoreExport PatchVec(PatchVec &from);
		void ResetData() { vert = patches[0] = patches[1] = PATCH_UNDEFINED; }
		CoreExport BOOL AddPatch(int index);
		CoreExport PatchVec& operator=(PatchVec& from);
		void Transform(Matrix3 &tm) { p = p * tm; }

		CoreExport IOResult Save(ISave* isave);
		CoreExport IOResult Load(ILoad* iload);
	};

// Patch vertex flags
#define PVERT_COPLANAR (1<<0)
#define PVERT_CORNER (0)
#define PVERT_TYPE_MASK 0xfffffffe
//watje 12-10-98
#define PVERT_HIDDEN		(1<<1)

// Patch vertex

class PatchVert {
	public:
		Point3 p;			// Location
		IntTab vectors;		// List of vectors attached to this vertex
		IntTab patches;		// List of patches using this vertex
		DWORD flags;
		int aux1;			// Used to track topo changes during editing (Edit Patch)
		int aux2;			// Used to track topo changes during editing (PatchMesh)
		CoreExport PatchVert();
		CoreExport PatchVert(PatchVert &from);
		~PatchVert() { ResetData(); }
		CoreExport PatchVert& operator=(PatchVert& from);
		void ResetData() { vectors.Delete(0,vectors.Count()); patches.Delete(0,patches.Count()); }
		CoreExport int FindVector(int index);
		CoreExport void AddVector(int index);
		CoreExport void DeleteVector(int index);
		CoreExport int FindPatch(int index);
		CoreExport void AddPatch(int index);
		CoreExport void DeletePatch(int index);
		void Transform(Matrix3 &tm) { p = p * tm; }

//watje  12-10-98
		CoreExport void SetHidden(BOOL sw = TRUE)
			{
			if(sw)
				flags |= PVERT_HIDDEN;
			else
				flags &= ~PVERT_HIDDEN;
			}
//watje  12-10-98
		BOOL IsHidden() { return (flags & PVERT_HIDDEN) ? TRUE : FALSE; }

		CoreExport IOResult Save(ISave* isave);
		CoreExport IOResult Load(ILoad* iload);
	};

class PatchEdge {
	public:
		int v1;		// Index of first vertex
		int vec12;	// Vector from v1 to v2
		int vec21;	// Vector from v2 to v1
		int v2;		// Index of second vertex
		int patch1;	// Index of first patch
		int patch2;	// Index of second patch
		int aux1;	// Used to track topo changes during editing (Edit Patch)
		int aux2;	// Used to track topo changes during editing (PatchMesh)
		CoreExport PatchEdge();
		CoreExport PatchEdge(PatchEdge &from);
		CoreExport PatchEdge(int v1, int vec12, int vec21, int v2, int p1, int p2, int aux1=-1, int aux2=-1);
		// Dump the patch edge structure via DebugPrints
		CoreExport void Dump();
	};

// Patch types

#define PATCH_UNDEF	0	// Undefined (watch out!)
#define PATCH_TRI	3	// Triangular patch
#define PATCH_QUAD	4	// Quadrilateral patch

// Patch Flags:
#define PATCH_AUTO			(1<<0)	// Interior verts computed automatically if set
#define PATCH_MANUAL		(0)		// Interior verts stored in 'interior' array
#define PATCH_INTERIOR_MASK 0xfffffffe
//watje 12-10-98
#define PATCH_HIDDEN		(1<<1)  //patch is hidden


// The mat ID is stored in the HIWORD of the patch flags
#define PATCH_MATID_SHIFT	16
#define PATCH_MATID_MASK	0xFFFF

class Patch {	
	public:
		int type;			// See types, above
		int	v[4];			// Can have three or four vertices
		int	vec[8];			// Can have six or eight vector points
		int	interior[4];	// Can have one or four interior vertices
		Point3 aux[9];		// Used for triangular patches only -- Degree 4 control points
		int	adjacent[4];	// Adjacent patches -- Can have three or four
		int	edge[4];		// Pointers into edge list -- Can have three or four
		DWORD	smGroup;	// Defaults to 1 -- All patches smoothed in a PatchMesh
		DWORD	flags;		// See flags, above
		int aux1;			// Used to track topo changes during editing (Edit Patch)
		int aux2;			// Used to track topo changes during editing (PatchMesh)

#ifdef CHECK_TRI_PATCH_AUX
		Point3 auxSource[9];
		CoreExport void CheckTriAux(PatchMesh *pMesh);
#endif //CHECK_TRI_PATCH_AUX

		CoreExport Patch();	// WARNING: This does not allocate arrays -- Use SetType(type) or Patch(type)
		CoreExport Patch(int type);
		CoreExport Patch(Patch& fromPatch);
		CoreExport ~Patch();
		CoreExport void Init();
		void	setVerts(int *vrt) { memcpy(v, vrt, type * sizeof(int)); }
		void	setVerts(int a, int b, int c)  { assert(type == PATCH_TRI); v[0]=a; v[1]=b; v[2]=c; }
		void	setVerts(int a, int b, int c, int d)  { assert(type == PATCH_QUAD); v[0]=a; v[1]=b; v[2]=c; v[3]=d; }
		void	setVecs(int ab, int ba, int bc, int cb, int ca, int ac) {
			assert(type == PATCH_TRI);
			vec[0]=ab; vec[1]=ba; vec[2]=bc; vec[3]=cb; vec[4]=ca; vec[5]=ac;
			}
		void	setVecs(int ab, int ba, int bc, int cb, int cd, int dc, int da, int ad) {
			assert(type == PATCH_QUAD);
			vec[0]=ab; vec[1]=ba; vec[2]=bc; vec[3]=cb; vec[4]=cd; vec[5]=dc; vec[6]=da, vec[7]=ad;
			}
		void	setInteriors(int a, int b, int c) {
			assert(type == PATCH_TRI);
			interior[0]=a; interior[1]=b; interior[2]=c;
			}
		void	setInteriors(int a, int b, int c, int d) {
			assert(type == PATCH_QUAD);
			interior[0]=a; interior[1]=b; interior[2]=c; interior[3]=d;
			}
		int		getVert(int index)	{ return v[index]; }
		int *	getAllVerts(void)	{ return v; }
		MtlID	getMatID() {return (int)((flags>>FACE_MATID_SHIFT)&FACE_MATID_MASK);}
		void    setMatID(MtlID id) {flags &= 0xFFFF; flags |= (DWORD)(id<<FACE_MATID_SHIFT);}
		CoreExport Point3 interp(PatchMesh *pMesh, float u, float v);			// Quadrilateral
		CoreExport Point3 interp(PatchMesh *pMesh, float u, float v, float w);	// Triangle
		CoreExport void ComputeAux(PatchMesh *pMesh, int index);
		CoreExport void ComputeAux(PatchMesh *pMesh);	// Do all degree-4 points
		CoreExport void computeInteriors(PatchMesh* pMesh);
		CoreExport void SetType(int type, BOOL init = FALSE);
		CoreExport Patch& operator=(Patch& from);
		CoreExport void SetAuto(BOOL sw = TRUE);
		BOOL IsAuto() { return (flags & PATCH_AUTO) ? TRUE : FALSE; }

//watje 12-10-98
		CoreExport void SetHidden(BOOL sw = TRUE);
//watje 12-10-98
		BOOL IsHidden() { return (flags & PATCH_HIDDEN) ? TRUE : FALSE; }


		// Dump the patch mesh structure via DebugPrints

		CoreExport void Dump();

		CoreExport IOResult Save(ISave* isave);
		CoreExport IOResult Load(ILoad* iload);
	};

// Separate class for patch texture verts
class TVPatch {	
	public:
		int	tv[4];			// Texture verts (always 4 here, even for tri patches)
		CoreExport TVPatch();
		CoreExport TVPatch(TVPatch& fromPatch);
		CoreExport void Init();
		CoreExport void setTVerts(int *vrt, int count);
		CoreExport void setTVerts(int a, int b, int c, int d = 0);
		int		getTVert(int index)	{ return tv[index]; }
		int *	getAllTVerts(void)	{ return tv; }
		CoreExport TVPatch& operator=(const TVPatch& from);

		CoreExport IOResult Save(ISave* isave);
		CoreExport IOResult Load(ILoad* iload);
	};


// Flag definitions
#define COMP_TRANSFORM	0x0001	// forces recalc of model->screen transform; else will attempt to use cache
#define COMP_IGN_RECT	0x0002	// forces all polys to be rendered; else only those intersecting the box will be
#define COMP_LIGHTING	0x0004	// forces re-lighting of all verts (as when a light moves); else only relight moved verts

#define COMP_ALL		0x00ff

// If this bit is set then the node being displayed by this mesh is selected.
// Certain display flags only activate when this bit is set.
#define COMP_OBJSELECTED	(1<<8)
#define COMP_OBJFROZEN		(1<<9)

typedef int (*INTRFUNC)();

CoreExport void setPatchIntrFunc(INTRFUNC fn);

// Special types for patch vertex hits -- Allows us to distinguish what they hit on a pick
#define PATCH_HIT_PATCH		0
#define PATCH_HIT_EDGE		1
#define PATCH_HIT_VERTEX	2
#define PATCH_HIT_VECTOR	3
#define PATCH_HIT_INTERIOR	4

class PatchSubHitRec {
	private:		
		PatchSubHitRec *next;
	public:
		DWORD	dist;
		PatchMesh *patch;
		int		index;
		int		type;

		PatchSubHitRec( DWORD dist, PatchMesh *patch, int index, int type, PatchSubHitRec *next ) 
			{ this->dist = dist; this->patch = patch; this->index = index; this->type = type; this->next = next; }

		PatchSubHitRec *Next() { return next; }		
	};

class SubPatchHitList {
	private:
		PatchSubHitRec *first;
	public:
		SubPatchHitList() { first = NULL; }
		~SubPatchHitList() {
			PatchSubHitRec *ptr = first, *fptr;
			while ( ptr ) {
				fptr = ptr;
				ptr = ptr->Next();
				delete fptr;
				}
			first = NULL;
			}	

		PatchSubHitRec *First() { return first; }
		void AddHit( DWORD dist, PatchMesh *patch, int index, int type ) {
			first = new PatchSubHitRec(dist,patch,index,type,first);
			}
	};


// Special storage class for hit records so we can know which object was hit
class PatchHitData : public HitData {
	public:
		PatchMesh *patch;
		int index;
		int type;
		PatchHitData(PatchMesh *patch, int index, int type)
			{ this->patch = patch; this->index = index; this->type = type; }
		~PatchHitData() {}
	};

// Flags for sub object hit test

// NOTE: these are the same bits used for object level.
#define SUBHIT_PATCH_SELONLY	(1<<0)
#define SUBHIT_PATCH_UNSELONLY	(1<<2)
#define SUBHIT_PATCH_ABORTONHIT	(1<<3)
#define SUBHIT_PATCH_SELSOLID	(1<<4)

#define SUBHIT_PATCH_VERTS		(1<<24)
#define SUBHIT_PATCH_VECS		(1<<25)
#define SUBHIT_PATCH_PATCHES	(1<<26)
#define SUBHIT_PATCH_EDGES		(1<<27)
#define SUBHIT_PATCH_TYPEMASK	(SUBHIT_PATCH_VERTS|SUBHIT_PATCH_VECS|SUBHIT_PATCH_EDGES|SUBHIT_PATCH_PATCHES)


// Display flags
#define DISP_VERTTICKS		(1<<0)

#define DISP_SELVERTS		(1<<10)
#define DISP_SELPATCHES		(1<<11)
#define DISP_SELEDGES		(1<<12)
#define DISP_SELPOLYS		(1<<13)

#define DISP_LATTICE		(1<<16)
#define DISP_VERTS			(1<<17)

// Selection level bits.
#define PATCH_OBJECT		(1<<0)
#define PATCH_VERTEX		(1<<1)
#define PATCH_PATCH			(1<<2)
#define PATCH_EDGE			(1<<3)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品视频.| 午夜精品福利一区二区蜜股av| 蜜臀av性久久久久蜜臀aⅴ| 欧美美女bb生活片| 麻豆视频一区二区| 国产日韩成人精品| 99久久久免费精品国产一区二区| 亚洲视频你懂的| 色老汉av一区二区三区| 午夜精品一区二区三区三上悠亚| 9191国产精品| 国产经典欧美精品| 亚洲黄色小视频| 91精品婷婷国产综合久久| 国产一区二区调教| 亚洲手机成人高清视频| 91精品久久久久久久91蜜桃| 国产精品影视网| 亚洲美女免费在线| 欧美xxx久久| 91香蕉视频污| 麻豆高清免费国产一区| 国产精品素人视频| 欧美日韩另类一区| 国产91精品露脸国语对白| 亚洲www啪成人一区二区麻豆| 精品噜噜噜噜久久久久久久久试看| 99久久亚洲一区二区三区青草| 视频一区二区三区在线| 亚洲国产高清在线| 欧美一区二区三区免费观看视频| 高清不卡一区二区| 日韩激情视频网站| 亚洲三级在线观看| 国产亚洲欧美色| 欧美日韩一区二区不卡| a在线欧美一区| 麻豆久久一区二区| 一区二区三区日韩| 欧美激情中文字幕| 欧美大片在线观看| 欧美性生活一区| 欧美精品一区二区三区视频| 精品福利一二区| 欧美性猛片xxxx免费看久爱| 国产成人无遮挡在线视频| 日本网站在线观看一区二区三区| 国产精品乱人伦一区二区| 91精品一区二区三区在线观看| 色综合久久综合网欧美综合网 | 国产精品免费网站在线观看| 337p亚洲精品色噜噜噜| 在线观看一区二区视频| av中文字幕不卡| 国产乱人伦偷精品视频免下载 | 欧美成人r级一区二区三区| 色综合久久九月婷婷色综合| 国产成人精品一区二区三区网站观看| 丝袜美腿成人在线| 亚洲一区二区免费视频| 自拍偷拍国产亚洲| 亚洲欧洲精品天堂一级 | 国产99久久久国产精品潘金| 美女一区二区三区在线观看| 丝袜亚洲精品中文字幕一区| 一区二区三区欧美激情| 国产精品久久久久久久久免费丝袜 | 亚洲综合无码一区二区| 日韩美女精品在线| 国产精品国产三级国产有无不卡| 欧美xxxxx裸体时装秀| 欧美一级精品大片| 91精品国产欧美一区二区成人| 精品视频在线看| 欧美日韩中文一区| 91精品欧美综合在线观看最新| 欧美剧情电影在线观看完整版免费励志电影 | 久久免费看少妇高潮| 精品久久国产字幕高潮| 久久日韩粉嫩一区二区三区| 26uuu亚洲综合色| 国产日韩欧美高清| 亚洲欧美在线另类| 亚洲一区自拍偷拍| 天天综合天天做天天综合| 日本视频中文字幕一区二区三区| 日韩av电影免费观看高清完整版| 免费的成人av| 国产精品综合一区二区三区| 成人精品视频一区二区三区 | 欧美日韩成人综合| 日韩欧美国产电影| 国产日韩视频一区二区三区| 国产精品乱码人人做人人爱| 亚洲乱码日产精品bd| 亚洲成人av一区二区| 免费不卡在线视频| 国产激情一区二区三区| 色婷婷av一区二区三区大白胸 | 一本一本大道香蕉久在线精品| 欧美性猛交xxxxxx富婆| 日韩一区二区三区电影| 久久久91精品国产一区二区精品| 中文字幕制服丝袜成人av| 亚洲一卡二卡三卡四卡| 麻豆成人久久精品二区三区红| 国产精品一区在线观看乱码| 色婷婷亚洲一区二区三区| 欧美一区二区三区免费大片| 中文幕一区二区三区久久蜜桃| 亚洲在线视频免费观看| 久久精品理论片| 91丨porny丨在线| 日韩欧美国产午夜精品| 亚洲人成小说网站色在线| 青娱乐精品视频| 99精品欧美一区二区蜜桃免费| 欧美日韩黄色影视| 国产精品久久久久久久第一福利 | 91麻豆精品国产91久久久| 国产喷白浆一区二区三区| 亚洲一区日韩精品中文字幕| 久久99国内精品| 在线亚洲一区二区| 久久精品视频免费| 五月婷婷激情综合网| 不卡视频免费播放| 精品国产伦理网| 亚洲午夜久久久久久久久久久| 国产一区二区三区日韩| 欧美日韩国产免费| 自拍偷自拍亚洲精品播放| 国产一区二区三区久久悠悠色av| 欧美午夜精品一区二区蜜桃| 中文字幕国产一区| 久久精品国产久精国产| 欧美午夜在线一二页| 亚洲同性gay激情无套| 国产真实乱对白精彩久久| 欧美午夜免费电影| 亚洲免费看黄网站| 成人一区二区在线观看| 精品国产一区二区三区四区四| 亚洲国产日韩a在线播放性色| 成人免费毛片片v| 久久午夜免费电影| 精一区二区三区| 日韩亚洲欧美在线观看| 婷婷亚洲久悠悠色悠在线播放| 99re热视频精品| 中文字幕欧美国产| 国产麻豆视频精品| 久久先锋资源网| 国产一区二区三区在线观看免费 | 国产精品入口麻豆原神| 国产专区欧美精品| 26uuu成人网一区二区三区| 美女在线视频一区| 91精品国产综合久久久蜜臀粉嫩| 亚洲一区电影777| 欧美天天综合网| 亚洲综合色自拍一区| 色8久久精品久久久久久蜜| 亚洲柠檬福利资源导航| 在线观看欧美黄色| 亚洲mv大片欧洲mv大片精品| 欧美日韩视频在线第一区| 视频精品一区二区| 777午夜精品视频在线播放| 五月天欧美精品| 7777精品久久久大香线蕉| 日韩av不卡在线观看| 日韩精品在线一区二区| 国产综合久久久久久久久久久久| 精品国产123| 国产不卡在线播放| 国产精品久久久久久久久免费丝袜 | 欧美一区三区二区| 乱一区二区av| 欧美国产在线观看| 99久久婷婷国产综合精品| 一区二区三区在线观看国产| 欧美日韩1234| 狠狠色狠狠色综合日日91app| 精品盗摄一区二区三区| 国产精品一二一区| 亚洲女子a中天字幕| 欧美日韩在线免费视频| 麻豆精品视频在线观看免费| 久久久久久电影| 91网上在线视频| 日本欧美一区二区三区乱码| 精品乱人伦小说| 91麻豆.com| 毛片基地黄久久久久久天堂| 国产精品素人一区二区| 欧美伦理视频网站| 国产99一区视频免费| 午夜亚洲国产au精品一区二区| 精品噜噜噜噜久久久久久久久试看 |