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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? brush.c

?? quake3工具源碼。包括生成bsp文件
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
#include "qbsp.h"


int		c_active_brushes;

int		c_nodes;

// if a brush just barely pokes onto the other side,
// let it slide by without chopping
#define	PLANESIDE_EPSILON	0.001
//0.1




/*
================
CountBrushList
================
*/
int	CountBrushList (bspbrush_t *brushes)
{
	int	c;

	c = 0;
	for ( ; brushes ; brushes = brushes->next)
		c++;
	return c;
}


/*
================
AllocBrush
================
*/
bspbrush_t *AllocBrush (int numsides)
{
	bspbrush_t	*bb;
	int			c;

	c = (int)&(((bspbrush_t *)0)->sides[numsides]);
	bb = malloc(c);
	memset (bb, 0, c);
	if (numthreads == 1)
		c_active_brushes++;
	return bb;
}

/*
================
FreeBrush
================
*/
void FreeBrush (bspbrush_t *brushes)
{
	int			i;

	for (i=0 ; i<brushes->numsides ; i++)
		if (brushes->sides[i].winding)
			FreeWinding(brushes->sides[i].winding);
	free (brushes);
	if (numthreads == 1)
		c_active_brushes--;
}


/*
================
FreeBrushList
================
*/
void FreeBrushList (bspbrush_t *brushes)
{
	bspbrush_t	*next;

	for ( ; brushes ; brushes = next)
	{
		next = brushes->next;

		FreeBrush (brushes);
	}		
}

/*
==================
CopyBrush

Duplicates the brush, the sides, and the windings
==================
*/
bspbrush_t *CopyBrush (bspbrush_t *brush)
{
	bspbrush_t *newbrush;
	int			size;
	int			i;
	
	size = (int)&(((bspbrush_t *)0)->sides[brush->numsides]);

	newbrush = AllocBrush (brush->numsides);
	memcpy (newbrush, brush, size);

	for (i=0 ; i<brush->numsides ; i++)
	{
		if (brush->sides[i].winding)
			newbrush->sides[i].winding = CopyWinding (brush->sides[i].winding);
	}

	return newbrush;
}


/*
================
DrawBrushList
================
*/
void DrawBrushList (bspbrush_t *brush)
{
	int		i;
	side_t	*s;

	GLS_BeginScene ();
	for ( ; brush ; brush=brush->next)
	{
		for (i=0 ; i<brush->numsides ; i++)
		{
			s = &brush->sides[i];
			if (!s->winding)
				continue;
			GLS_Winding (s->winding, 0);
		}
	}
	GLS_EndScene ();
}



/*
================
WriteBrushList
================
*/
void WriteBrushList (char *name, bspbrush_t *brush, qboolean onlyvis)
{
	int		i;
	side_t	*s;
	FILE	*f;

	qprintf ("writing %s\n", name);
	f = SafeOpenWrite (name);

	for ( ; brush ; brush=brush->next)
	{
		for (i=0 ; i<brush->numsides ; i++)
		{
			s = &brush->sides[i];
			if (!s->winding)
				continue;
			if (onlyvis && !s->visible)
				continue;
			OutputWinding (brush->sides[i].winding, f);
		}
	}

	fclose (f);
}


/*
=============
PrintBrush
=============
*/
void PrintBrush (bspbrush_t *brush)
{
	int		i;

	_printf ("brush: %p\n", brush);
	for (i=0;i<brush->numsides ; i++)
	{
		pw(brush->sides[i].winding);
		_printf ("\n");
	}
}

/*
==================
BoundBrush

Sets the mins/maxs based on the windings
returns false if the brush doesn't enclose a valid volume
==================
*/
qboolean BoundBrush (bspbrush_t *brush)
{
	int			i, j;
	winding_t	*w;

	ClearBounds (brush->mins, brush->maxs);
	for (i=0 ; i<brush->numsides ; i++)
	{
		w = brush->sides[i].winding;
		if (!w)
			continue;
		for (j=0 ; j<w->numpoints ; j++)
			AddPointToBounds (w->p[j], brush->mins, brush->maxs);
	}

	for (i=0 ; i<3 ; i++) {
		if (brush->mins[i] < MIN_WORLD_COORD || brush->maxs[i] > MAX_WORLD_COORD
			|| brush->mins[i] >= brush->maxs[i] ) {
			return qfalse;
		}
	}

	return qtrue;
}

/*
==================
CreateBrushWindings

makes basewindigs for sides and mins / maxs for the brush
returns false if the brush doesn't enclose a valid volume
==================
*/
qboolean CreateBrushWindings (bspbrush_t *brush)
{
	int			i, j;
	winding_t	*w;
	side_t		*side;
	plane_t		*plane;

	for (i=0 ; i<brush->numsides ; i++)
	{
		side = &brush->sides[i];
		plane = &mapplanes[side->planenum];
		w = BaseWindingForPlane (plane->normal, plane->dist);
		for (j=0 ; j<brush->numsides && w; j++)
		{
			if (i == j)
				continue;
			if ( brush->sides[j].planenum == ( brush->sides[i].planenum ^ 1 ) )
				continue;		// back side clipaway
			if (brush->sides[j].bevel)
				continue;
			if (brush->sides[j].backSide)
				continue;
			plane = &mapplanes[brush->sides[j].planenum^1];
			ChopWindingInPlace (&w, plane->normal, plane->dist, 0); //CLIP_EPSILON);
		}

		side->winding = w;
	}

	return BoundBrush (brush);
}

/*
==================
BrushFromBounds

Creates a new axial brush
==================
*/
bspbrush_t	*BrushFromBounds (vec3_t mins, vec3_t maxs)
{
	bspbrush_t	*b;
	int			i;
	vec3_t		normal;
	vec_t		dist;

	b = AllocBrush (6);
	b->numsides = 6;
	for (i=0 ; i<3 ; i++)
	{
		VectorClear (normal);
		normal[i] = 1;
		dist = maxs[i];
		b->sides[i].planenum = FindFloatPlane (normal, dist);

		normal[i] = -1;
		dist = -mins[i];
		b->sides[3+i].planenum = FindFloatPlane (normal, dist);
	}

	CreateBrushWindings (b);

	return b;
}

/*
==================
BrushVolume

==================
*/
vec_t BrushVolume (bspbrush_t *brush)
{
	int			i;
	winding_t	*w;
	vec3_t		corner;
	vec_t		d, area, volume;
	plane_t		*plane;

	if (!brush)
		return 0;

	// grab the first valid point as the corner

	w = NULL;
	for (i=0 ; i<brush->numsides ; i++)
	{
		w = brush->sides[i].winding;
		if (w)
			break;
	}
	if (!w)
		return 0;
	VectorCopy (w->p[0], corner);

	// make tetrahedrons to all other faces

	volume = 0;
	for ( ; i<brush->numsides ; i++)
	{
		w = brush->sides[i].winding;
		if (!w)
			continue;
		plane = &mapplanes[brush->sides[i].planenum];
		d = -(DotProduct (corner, plane->normal) - plane->dist);
		area = WindingArea (w);
		volume += d*area;
	}

	volume /= 3;
	return volume;
}


/*
==================
WriteBspBrushMap
==================
*/
void WriteBspBrushMap (char *name, bspbrush_t *list)
{
	FILE	*f;
	side_t	*s;
	int		i;
	winding_t	*w;

	_printf ("writing %s\n", name);
	f = fopen (name, "wb");
	if (!f)
		Error ("Can't write %s\b", name);

	fprintf (f, "{\n\"classname\" \"worldspawn\"\n");

	for ( ; list ; list=list->next )
	{
		fprintf (f, "{\n");
		for (i=0,s=list->sides ; i<list->numsides ; i++,s++)
		{
			w = BaseWindingForPlane (mapplanes[s->planenum].normal, mapplanes[s->planenum].dist);

			fprintf (f,"( %i %i %i ) ", (int)w->p[0][0], (int)w->p[0][1], (int)w->p[0][2]);
			fprintf (f,"( %i %i %i ) ", (int)w->p[1][0], (int)w->p[1][1], (int)w->p[1][2]);
			fprintf (f,"( %i %i %i ) ", (int)w->p[2][0], (int)w->p[2][1], (int)w->p[2][2]);

			fprintf (f, "notexture 0 0 0 1 1\n" );
			FreeWinding (w);
		}
		fprintf (f, "}\n");
	}
	fprintf (f, "}\n");

	fclose (f);

}


//=====================================================================================

/*
====================
FilterBrushIntoTree_r

====================
*/
int FilterBrushIntoTree_r( bspbrush_t *b, node_t *node ) {
	bspbrush_t		*front, *back;
	int				c;

	if ( !b ) {
		return 0;
	}

	// add it to the leaf list
	if ( node->planenum == PLANENUM_LEAF ) {
		b->next = node->brushlist;
		node->brushlist = b;

		// classify the leaf by the structural brush
		if ( !b->detail ) {
			if ( b->opaque ) {
				node->opaque = qtrue;
				node->areaportal = qfalse;
			} else if ( b->contents & CONTENTS_AREAPORTAL ) {
				if ( !node->opaque ) {
					node->areaportal = qtrue;
				}
			}
		}

		return 1;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品123区| 久久超级碰视频| 97国产一区二区| 欧美极品xxx| 99久久er热在这里只有精品66| 中文一区二区在线观看| av在线播放一区二区三区| 国产精品福利影院| 在线观看亚洲精品视频| 亚洲图片一区二区| 欧美一区二区播放| 极品少妇一区二区| 国产精品欧美一区喷水| 一本久久精品一区二区| 性做久久久久久久久| 日韩精品中文字幕在线一区| 国产在线一区观看| 亚洲码国产岛国毛片在线| 欧美日韩dvd在线观看| 美女视频黄久久| 欧美国产视频在线| 欧美亚日韩国产aⅴ精品中极品| 午夜国产不卡在线观看视频| 精品国免费一区二区三区| 成人午夜电影久久影院| 一个色在线综合| 日韩三级高清在线| 成人蜜臀av电影| 丝袜国产日韩另类美女| 久久先锋影音av鲁色资源| 91色视频在线| 麻豆91免费看| 亚洲精品免费在线| 日韩欧美自拍偷拍| 色噜噜狠狠成人中文综合| 久久国产麻豆精品| 亚洲免费在线视频| 欧美变态tickle挠乳网站| 色综合久久综合网| 国产一区在线观看视频| 亚洲一区二区在线播放相泽| 精品久久久久久久人人人人传媒| 在线观看精品一区| 国产精品一级二级三级| 亚洲午夜激情av| 中文字幕一区二区三区在线观看| 欧美一级电影网站| 日本乱人伦aⅴ精品| 国产一区二区女| 日本不卡的三区四区五区| 亚洲欧洲www| 久久精品欧美一区二区三区不卡 | 久久久精品tv| 欧美日韩电影一区| 91小宝寻花一区二区三区| 国产一区二区在线观看视频| 亚洲国产美女搞黄色| 中文字幕第一区二区| 精品国产精品网麻豆系列 | 国产成人精品免费| 免费看日韩精品| 亚洲午夜电影网| 亚洲精选在线视频| 欧美国产一区视频在线观看| 欧美videossexotv100| 欧美一区二区三区在线电影| 欧美日韩中文字幕一区二区| 色综合天天在线| 成人av小说网| 成人亚洲一区二区一| 国产精品正在播放| 国产在线一区二区| 麻豆精品久久久| 捆绑变态av一区二区三区| 日韩不卡在线观看日韩不卡视频| 亚洲小说欧美激情另类| 亚洲国产精品影院| 一区av在线播放| 亚洲va国产va欧美va观看| 丝袜国产日韩另类美女| 蜜桃久久精品一区二区| 蜜桃av噜噜一区| 狠狠色狠狠色综合系列| 麻豆精品一二三| 国产呦精品一区二区三区网站| 国产一区二区三区免费播放| 国产精品一区二区91| 国产91对白在线观看九色| zzijzzij亚洲日本少妇熟睡| 不卡一区中文字幕| 日本韩国视频一区二区| 欧美色涩在线第一页| 欧美精品在线观看播放| 日韩欧美一区电影| 久久久久久免费| 国产精品传媒入口麻豆| 洋洋av久久久久久久一区| 午夜国产不卡在线观看视频| 美日韩黄色大片| 国产精品一二三区| av在线一区二区三区| 日本乱人伦aⅴ精品| 91精品国产综合久久精品app| 精品国产一区二区三区不卡| 国产精品久久久久久久岛一牛影视| 一区在线播放视频| 亚洲高清三级视频| 久久er精品视频| 不卡视频在线看| 欧美三级日韩三级| 精品国产91乱码一区二区三区| 国产精品你懂的在线欣赏| 一级做a爱片久久| 韩国av一区二区三区| 成人黄色小视频| 欧美日韩不卡一区二区| 国产亚洲欧美日韩日本| 亚洲激情综合网| 久久草av在线| 色88888久久久久久影院按摩 | 一区二区三区日韩在线观看| 精品在线你懂的| 97精品久久久久中文字幕| 日韩欧美中文一区| **性色生活片久久毛片| 日本午夜一区二区| 99久久婷婷国产综合精品电影 | 久久免费电影网| 一区二区三区欧美日韩| 国产在线视视频有精品| 欧美性xxxxxxxx| 国产精品高潮呻吟久久| 九九**精品视频免费播放| 91成人免费电影| 欧美经典一区二区三区| 日精品一区二区| 色拍拍在线精品视频8848| 精品国产乱码久久| 日韩和的一区二区| 色天使久久综合网天天| 欧美韩国日本综合| 激情欧美日韩一区二区| 欧美男人的天堂一二区| 日韩美女视频一区二区 | 日韩二区三区四区| 99久久精品免费精品国产| 精品国产成人系列| 日韩av中文字幕一区二区| 色94色欧美sute亚洲线路一久| 国产精品免费aⅴ片在线观看| 久久精品国产澳门| 欧美电影一区二区| 亚洲一区欧美一区| 一本高清dvd不卡在线观看| 国产精品成人免费在线| 国产伦精品一区二区三区免费迷| 欧美一区二区三区四区视频| 亚洲午夜电影在线| 欧美日韩一区二区三区高清| 依依成人精品视频| 一本色道久久加勒比精品| 成人免费在线观看入口| 99久久国产综合精品麻豆| 国产网站一区二区| 高清成人在线观看| 国产日韩欧美精品综合| 国产一区二区h| 久久婷婷一区二区三区| 久久国产精品区| 日韩视频一区二区三区在线播放| 日韩vs国产vs欧美| 91精品国产免费| 日本不卡视频在线| 欧美一级二级三级乱码| 日本成人在线网站| 在线成人免费观看| 日韩精彩视频在线观看| 欧美一区二区三区免费观看视频 | 日本 国产 欧美色综合| 欧美日韩大陆一区二区| 日韩中文字幕1| 欧美精品一卡二卡| 免费日韩伦理电影| 欧美成人精品福利| 国产精品影视在线| 国产精品久久久一本精品| 91麻豆免费在线观看| 亚洲一区二区av在线| 337p亚洲精品色噜噜狠狠| 日本女人一区二区三区| 精品三级在线观看| 国产乱码精品一区二区三区av | 91小宝寻花一区二区三区| 亚洲人亚洲人成电影网站色| 色88888久久久久久影院按摩 | 成人免费在线播放视频| 91蝌蚪porny| 午夜精品久久久久久久| 日韩你懂的在线播放| 成人自拍视频在线|