亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美大胆一级视频| 日韩欧美国产综合在线一区二区三区| 欧美不卡123| 亚洲日本在线天堂| 九九久久精品视频 | 亚洲免费资源在线播放| 蜜臀久久99精品久久久久宅男| 国产精品亚洲第一区在线暖暖韩国 | 一二三区精品福利视频| 韩国精品在线观看| 日韩欧美中文字幕制服| 亚洲国产一区二区三区青草影视 | 91精品办公室少妇高潮对白| 国产亚洲欧美日韩俺去了| 日本欧美大码aⅴ在线播放| 91麻豆精品一区二区三区| 国产精品久久福利| 国产乱理伦片在线观看夜一区| 日韩亚洲欧美在线| 偷偷要91色婷婷| 欧美喷潮久久久xxxxx| 亚洲精品乱码久久久久久| 成人av一区二区三区| 精品久久久久香蕉网| 亚洲图片一区二区| 99久久99久久精品国产片果冻 | 日韩一区二区免费高清| 亚洲免费av高清| av激情综合网| 秋霞成人午夜伦在线观看| 一本色道a无线码一区v| 国产日韩欧美综合在线| 精品一区二区在线看| 337p亚洲精品色噜噜噜| 亚洲一区二区三区精品在线| 99久久精品国产麻豆演员表| 久久久久久久综合日本| 国精产品一区一区三区mba视频| 欧洲av一区二区嗯嗯嗯啊| 国产日产欧美一区| 国产在线日韩欧美| 7777女厕盗摄久久久| 国产精品高潮呻吟久久| 国产99久久久国产精品免费看 | 美女视频黄频大全不卡视频在线播放| 97精品国产露脸对白| 国产精品国产自产拍在线| 国产一区二区免费视频| wwww国产精品欧美| 国产激情91久久精品导航| 久久免费精品国产久精品久久久久| 免费精品视频最新在线| 欧美日韩一级二级| 日韩黄色小视频| 欧美一三区三区四区免费在线看| 日韩国产欧美在线播放| 欧美大肚乱孕交hd孕妇| 国内精品久久久久影院色| 欧美精品少妇一区二区三区| 亚洲国产毛片aaaaa无费看| 91精品在线免费观看| 亚洲一区在线免费观看| 欧美日韩成人高清| 毛片基地黄久久久久久天堂| 日韩一二三区不卡| 国产盗摄一区二区三区| 18欧美亚洲精品| 欧美在线一区二区| 理论片日本一区| 久久久不卡网国产精品一区| eeuss鲁一区二区三区| 亚洲一区二区三区中文字幕| 日韩三级电影网址| 成人国产精品免费观看动漫| 亚洲日本丝袜连裤袜办公室| 欧美日韩精品一区二区三区蜜桃| 奇米777欧美一区二区| 久久综合久久鬼色| 91片在线免费观看| 午夜在线电影亚洲一区| 欧美极品aⅴ影院| 欧美日韩在线综合| 国产成人三级在线观看| 亚洲美女免费在线| 精品国产免费久久| 92精品国产成人观看免费 | 亚洲成a人在线观看| 欧美mv和日韩mv的网站| 99国内精品久久| 久久精品av麻豆的观看方式| 1区2区3区欧美| 欧美成人一区二区三区片免费| 成人午夜又粗又硬又大| 日韩国产欧美在线视频| 中文字幕一区免费在线观看| 91精品国产品国语在线不卡| 成人av在线资源| 久久草av在线| 亚洲成人激情综合网| 成人免费在线播放视频| 欧美色综合网站| 成人爱爱电影网址| 日韩**一区毛片| 亚洲精品五月天| 久久青草国产手机看片福利盒子| 在线中文字幕一区二区| 国产+成+人+亚洲欧洲自线| 免费成人深夜小野草| 亚洲精品日韩一| 国产精品灌醉下药二区| 久久久夜色精品亚洲| 日韩欧美一区二区视频| 欧美亚洲丝袜传媒另类| 91首页免费视频| 成人午夜视频福利| 国产精品一级黄| 精品在线一区二区三区| 91老师片黄在线观看| 国产激情视频一区二区在线观看| 国产精品一区二区免费不卡 | 538prom精品视频线放| 91麻豆免费观看| 一区二区三区欧美亚洲| 亚洲综合一区二区精品导航| 在线一区二区三区| 成人网页在线观看| 高清不卡在线观看| 色丁香久综合在线久综合在线观看| 激情综合网av| 日本成人在线网站| 蜜乳av一区二区| 蜜桃视频免费观看一区| 日本中文一区二区三区| 亚洲va中文字幕| 午夜视频在线观看一区二区三区| 亚洲色图清纯唯美| 亚洲人成小说网站色在线| 久久精品亚洲乱码伦伦中文 | 亚洲欧美日韩一区二区 | 国产精品久久国产精麻豆99网站| 中文字幕高清不卡| 国产精品久久久久aaaa樱花 | 欧美亚洲一区三区| 色素色在线综合| 日韩一区二区免费在线观看| 欧美大片顶级少妇| 日本一区二区在线不卡| 亚洲视频免费在线| 亚洲激情五月婷婷| 日韩av电影免费观看高清完整版在线观看| 亚洲国产美女搞黄色| 精品一区二区三区久久| 懂色中文一区二区在线播放| 99re在线精品| 欧美日韩高清一区二区三区| 日韩欧美国产一二三区| 亚洲国产成人在线| 亚洲精品免费在线| 亚洲影院免费观看| 亚洲综合色成人| 青青草原综合久久大伊人精品| 精品一区二区在线免费观看| aa级大片欧美| 日韩视频免费观看高清完整版在线观看| 久久亚洲私人国产精品va媚药| 中文字幕在线不卡| 热久久久久久久| 国产69精品久久777的优势| 欧美日韩中文精品| 欧美国产综合色视频| 亚洲国产中文字幕在线视频综合| 免费在线观看一区| 一本一本久久a久久精品综合麻豆| 欧美一区二区高清| 亚洲三级小视频| 久久99精品国产麻豆婷婷| 国产精品中文字幕日韩精品| 波多野结衣中文字幕一区| 欧美大片国产精品| 亚洲一区二区偷拍精品| 国产成人精品一区二区三区四区| 欧美性猛交xxxxxxxx| 欧美国产日本韩| 久久精品国产成人一区二区三区| 91丨国产丨九色丨pron| 久久免费视频一区| 日本麻豆一区二区三区视频| 91蝌蚪国产九色| 欧美国产日韩精品免费观看| 麻豆视频一区二区| 在线精品视频免费播放| 久久精品亚洲精品国产欧美kt∨| 中文子幕无线码一区tr| 国产福利精品一区| 精品久久久久av影院| 偷偷要91色婷婷| 欧美日韩国产综合久久| 一个色综合网站| 91在线精品一区二区| 久久精品亚洲麻豆av一区二区 |