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

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

?? buildbsp.c

?? quake 游戲原代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:

	DivlineFromWorldline (&divline, spliton);

/*      c = [lines_i count];
*/
	c = lines_i->count;

	for (i=0 ; i<c ; i++)
	{
/*              line_p = [lines_i elementAt:i];
*/
		line_p = (line_t *)lines_i->data + i;
		if (line_p == spliton)
			side = 0;
		else
			side = LineOnSide (line_p, &divline);
		switch (side)
		{
		case 0:
/*                      [frontlist_i addElement: line_p];
*/
			memcpy((line_t *)frontlist_i->data + frontlist_i->count, line_p, sizeof(line_t));
			frontlist_i->count += 1;
			frontlist_i->data = (line_t *)MyRealloc(frontlist_i->data,
			sizeof(line_t) * (frontlist_i->count), sizeof(line_t) * (frontlist_i->count + 1));
			break;
		case 1:
/*                      [backlist_i addElement: line_p];
*/
			memcpy((line_t *)backlist_i->data + backlist_i->count, line_p, sizeof(line_t));
			backlist_i->count += 1;
			backlist_i->data = (line_t *)MyRealloc(backlist_i->data,
				sizeof(line_t) * (backlist_i->count), sizeof(line_t) * (backlist_i->count + 1));
			break;
		case -2:
			newline_p = CutLine (line_p, &divline);
/*                      [frontlist_i addElement: line_p];
			[backlist_i addElement: newline_p];
*/
			memcpy((line_t *)frontlist_i->data + frontlist_i->count, line_p, sizeof(line_t));
			frontlist_i->count += 1;
			frontlist_i->data = (line_t *)MyRealloc(frontlist_i->data,
			sizeof(line_t) * (frontlist_i->count), sizeof(line_t) * (frontlist_i->count + 1));

			memcpy((line_t *)backlist_i->data + backlist_i->count, newline_p, sizeof(line_t));
			backlist_i->count += 1;
			backlist_i->data = (line_t *)MyRealloc(backlist_i->data,
			sizeof(line_t) * (backlist_i->count), sizeof(line_t) * (backlist_i->count + 1));

			break;
		default:
			Error ("ExecuteSplit: bad side");
		}
	}
}

/*
================
=
= SplitCutBoxes
=
= Cuts a box in half along a line ****MADE BY MATT****
================
*/

void SplitCutBoxes(STORAGE * cutbox_i, line_t * spliton, 
	STORAGE * frontlist_i, STORAGE * backlist_i) {

divline_t divline;
short point_count, cur_point, cur_side; 
pvector2 cur_vec, next_vec; 
vector2 new_vec;
line_t cur_line;
line_t * newline_p;

DivlineFromWorldline(&divline, spliton);
point_count=cutbox_i->count;
cur_vec=(pvector2)cutbox_i->data+point_count-1;

for (cur_point=0; cur_point<point_count; cur_point++) {
	next_vec=(pvector2)cutbox_i->data+cur_point;   
	
	LineFromPoints(&cur_line, cur_vec, next_vec);
	cur_side=LineOnSide(&cur_line, &divline); 
	
	switch (cur_side) {
	case 0:

		if (PointOnSide(&(cur_line.p2), &divline)==-1) {
			memcpy((pvector2)backlist_i->data+backlist_i->count, next_vec, sizeof(vector2));
			backlist_i->count++;
			backlist_i->data=(pvector2)MyRealloc(backlist_i->data, 
			sizeof(vector2) *(backlist_i->count),sizeof(vector2) *(backlist_i->count+1));
		}

		memcpy((pvector2)frontlist_i->data+frontlist_i->count, next_vec, sizeof(vector2));          
		frontlist_i->count++;                                                        
		frontlist_i->data=(pvector2)MyRealloc(frontlist_i->data, 
		sizeof(vector2) *(frontlist_i->count), sizeof(vector2) *(frontlist_i->count+1));
		break;

	case 1:

		if (PointOnSide(&(cur_line.p2), &divline)==-1) {
			memcpy((pvector2)frontlist_i->data+frontlist_i->count, next_vec, sizeof(vector2));
			frontlist_i->count++;
			frontlist_i->data=(pvector2)MyRealloc(frontlist_i->data, 
			sizeof(vector2) *(frontlist_i->count), sizeof(vector2) *(frontlist_i->count+1));
		}

		memcpy((pvector2)backlist_i->data+backlist_i->count, next_vec, sizeof(vector2));
		backlist_i->count++;
		backlist_i->data=(pvector2)MyRealloc(backlist_i->data, 
		sizeof(vector2) *(backlist_i->count), sizeof(vector2) *(backlist_i->count+1));
		break;
	
	case -2:   
		newline_p=CutLine(&cur_line, &divline);
		
		if ((newline_p->p2.x==next_vec->x) && (newline_p->p2.y==next_vec->y)) {     
	new_vec.x=newline_p->p1.x;
	new_vec.y=newline_p->p1.y;
		} else {                                                             
	new_vec.x=newline_p->p2.x;
	new_vec.y=newline_p->p2.y;
		}

		memcpy((pvector2)frontlist_i->data+frontlist_i->count, &new_vec, sizeof(vector2));
		frontlist_i->count++;
		frontlist_i->data=(pvector2)MyRealloc(frontlist_i->data, 
		sizeof(vector2) *(frontlist_i->count), sizeof(vector2) *(frontlist_i->count+1));

		memcpy((pvector2)backlist_i->data+backlist_i->count, &new_vec, sizeof(vector2));
		backlist_i->count++;
		backlist_i->data=(pvector2)MyRealloc(backlist_i->data, 
		sizeof(vector2) *(backlist_i->count), sizeof(vector2) *(backlist_i->count+1));
	 
		if ((newline_p->p2.x==next_vec->x) && (newline_p->p2.y==next_vec->y)) {
	 memcpy((pvector2)backlist_i->data+backlist_i->count, next_vec, sizeof(vector2));
	 backlist_i->count++;
	 backlist_i->data=(pvector2)MyRealloc(backlist_i->data, 
	 sizeof(vector2) *(backlist_i->count), sizeof(vector2) *(backlist_i->count+1));
		} else {
	 memcpy((pvector2)frontlist_i->data+frontlist_i->count, next_vec, sizeof(vector2));
	 frontlist_i->count++;
	 frontlist_i->data=(pvector2)MyRealloc(frontlist_i->data, 
	 sizeof(vector2) *(frontlist_i->count), sizeof(vector2) *(frontlist_i->count+1));
		}
		break;

	default:
	  Error("Bad Cut Box!");
	  break;
	}
	cur_vec=next_vec;
}
}

/*                              
================
=
= BSPList
=
= Takes a storage of lines and recursively partitions the list
= Returns a bspnode_t
================
*/

/* float        gray = NX_WHITE; */
float gray = 0;                                                            

/* bspnode_t *BSPList (id lines_i)
*/
bspnode_t *BSPList(STORAGE *lines_i, STORAGE * cutbox_i)
{
/*      id                              frontlist_i, backlist_i;
*/
	STORAGE *frontlist_i, *backlist_i;
	STORAGE *cutbacklist_i, *cutfrontlist_i;
	int                             i,c, step;
	line_t                  *line_p, *bestline_p;
	int                             v, bestv;
	bspnode_t               *node_p;
/*
	if (draw)
		PSsetgray (gray);
	gray = 1.0 - gray;
*/

	node_p = (bspnode_t *)Alloc_Mem (sizeof(*node_p));
	memset (node_p, 0, sizeof(*node_p));

/*
 find the best line to partition on
*/

/*      c = [lines_i count];
*/

	c = lines_i->count;
	bestv = INT_MAX;
	bestline_p = NULL;
	step = (c/40)+1;                /* set this to 1 for an exhaustive search */
research:
	for (i=0 ; i<c ; i+=step)
	{
/*              line_p = [lines_i elementAt:i];
*/
		line_p = (line_t *)lines_i->data + i;
		v = EvaluateSplit (lines_i, line_p, bestv);
		if (v<bestv)
		{
			bestv = v;
			bestline_p = line_p;
		}
	}

/*
 if none of the lines should be split, the remaining lines
 are convex, and form a terminal node
*/
/*
printf ("bestv:%i\n",bestv);
*/
	if (bestv == INT_MAX)
	{
		if (step > 1)
		{       /* possible to get here with non convex area if BSPSLIDE specials
				 caused rejections */
			step = 1;
			goto research;
		}
		node_p->lines_i = lines_i;
		node_p->cutbox_i= cutbox_i;
		return node_p;
	}

/*
 divide the line list into two nodes along the best split line
*/
	DivlineFromWorldline (&node_p->divline, bestline_p);
/*
	frontlist_i =
	[[Storage alloc]
		initCount:              0
		elementSize:    sizeof(line_t)
		description:    NULL];
	backlist_i =
	[[Storage alloc]
		initCount:              0
		elementSize:    sizeof(line_t)
		description:    NULL];
*/
	frontlist_i = (STORAGE *)SafeMalloc(sizeof(STORAGE));
	frontlist_i->count = 0;
	frontlist_i->size = sizeof(line_t);
	frontlist_i->data = (line_t *)SafeMalloc(sizeof(line_t));

	backlist_i = (STORAGE *)SafeMalloc(sizeof(STORAGE));
	backlist_i->count = 0;
	backlist_i->size = sizeof(line_t);
	backlist_i->data = (line_t *)SafeMalloc(sizeof(line_t));

	ExecuteSplit (lines_i, bestline_p, frontlist_i, backlist_i);

	cutfrontlist_i = (STORAGE *)SafeMalloc(sizeof(STORAGE));
	cutfrontlist_i->count = 0;
	cutfrontlist_i->size = sizeof(vector2);
	cutfrontlist_i->data = (pvector2)SafeMalloc(sizeof(vector2));

	cutbacklist_i = (STORAGE *)SafeMalloc(sizeof(STORAGE));
	cutbacklist_i->count = 0;
	cutbacklist_i->size = sizeof(vector2);
	cutbacklist_i->data = (pvector2)SafeMalloc(sizeof(vector2));

	SplitCutBoxes(cutbox_i, bestline_p, cutfrontlist_i, cutbacklist_i);

/*
 recursively divide the lists
*/
	node_p->side[0] = BSPList (frontlist_i, cutfrontlist_i);
	node_p->side[1] = BSPList (backlist_i, cutbacklist_i);

	return node_p;
}



/*
=====================
=
= MakeSegs
=
=====================
*/

STORAGE *initialcutbox_i;

void MakeInitialCutBox() {
pvector2 v1,v2,v3,v4;                                                      
long min_x, min_y, max_x, max_y;
pvector2 cur_vec;
short counter;

// Get min and max points of world be looping through vectors

min_x=max_x=Vector_List[0].x;
min_y=max_y=Vector_List[0].y;

for (counter=1; counter < Number_Of_Vectors; counter++) {
	cur_vec=Vector_List+counter;
	if (cur_vec->x < min_x)
		min_x=cur_vec->x;
	if (cur_vec->y < min_y)
		min_y=cur_vec->y;
	if (cur_vec->x > max_x)
		max_x=cur_vec->x;
	if (cur_vec->y > max_y)
		max_y=cur_vec->y;
}

initialcutbox_i=(STORAGE *)SafeMalloc(sizeof(STORAGE));
initialcutbox_i->count=4;
initialcutbox_i->size=4*sizeof(vector2);
initialcutbox_i->data=(pvector2)SafeMalloc(4 * sizeof(vector2));

v1=(pvector2)initialcutbox_i->data+0;
v2=(pvector2)initialcutbox_i->data+1;
v3=(pvector2)initialcutbox_i->data+2;
v4=(pvector2)initialcutbox_i->data+3;

v1->x=min_x;
v1->y=min_y;
v2->x=min_x;
v2->y=max_y;
v3->x=max_x;
v3->y=max_y;
v4->x=max_x;
v4->y=min_y;

}

/* id segstore_i;
*/
STORAGE *segstore_i;

void MakeSegs (void)
{
				int                             i, count;
				worldline_t             *wl;
/* line_t   li;
*/
				line_t                  *li;

/*
				segstore_i =
				[[Storage alloc]
								initCount:              0
								elementSize:    sizeof(line_t)
								description:    NULL];
*/
				segstore_i = (STORAGE *)SafeMalloc(sizeof(STORAGE));
				segstore_i->data = (line_t *)SafeMalloc(sizeof(line_t));
				segstore_i->count = 0;
				segstore_i->size = sizeof(line_t);

/*
				count = [linestore_i count];
				wl = [linestore_i elementAt:0];
*/
				count = linestore_i->count;
				wl = linestore_i->data;

				li = segstore_i->data;

				for (i= 0 ; i<count ; i++, wl++)
				{
								li->p1 = wl->p1;
								li->p2 = wl->p2;
		li->linedef = i;
		li->side = 0;
		li->offset = 0;
		li->grouped = false;

/*              [segstore_i addElement: &li];
*/
		segstore_i->count += 1;
		segstore_i->data = (line_t *)MyRealloc(segstore_i->data,
		sizeof(line_t) * (segstore_i->count), sizeof(line_t) * (segstore_i->count + 1));
		li = (line_t *)segstore_i->data + segstore_i->count;

		if (wl->flags & ML_TWOSIDED)
		{
			li->p1 = wl->p2;
			li->p2 = wl->p1;
			li->linedef = i;
			li->side = 1;
			li->offset = 0;
			li->grouped = false;
/*                      [segstore_i addElement: &li];
*/
			segstore_i->count += 1;
			segstore_i->data = (line_t *)MyRealloc(segstore_i->data,
			sizeof(line_t) * (segstore_i->count), sizeof(line_t) * (segstore_i->count + 1));
			li = (line_t *)segstore_i->data + segstore_i->count;
		}
	}
}


/*
=====================
=
= BuildBSP
=
=====================
*/

bspnode_t       *startnode;

void BuildBSP (void)
{
	MakeSegs ();
		  MakeInitialCutBox();
	cuts = 0;
	startnode = BSPList (segstore_i, initialcutbox_i);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲丝袜美腿综合| 国产一区二区在线观看视频| 亚洲精品中文在线影院| 国产精品色婷婷久久58| 日本一区二区免费在线| 久久久精品免费观看| 久久精品一区蜜桃臀影院| 亚洲sss视频在线视频| 依依成人综合视频| 亚洲一区二区av在线| 洋洋成人永久网站入口| 亚洲精品伦理在线| 亚洲午夜精品17c| 亚洲成人一区二区| 日韩国产欧美视频| 九九精品一区二区| 国产米奇在线777精品观看| 国产精品456露脸| 99视频热这里只有精品免费| 91免费观看国产| 欧美调教femdomvk| 91精品国产综合久久蜜臀| 欧美成va人片在线观看| 久久久久综合网| 国产精品二三区| 一级中文字幕一区二区| 日日夜夜免费精品| 精品一区免费av| 成人国产电影网| 欧美又粗又大又爽| 欧美日韩久久一区| 2014亚洲片线观看视频免费| 国产精品美女久久久久久久| 亚洲愉拍自拍另类高清精品| 日本怡春院一区二区| 国产精品1区2区| 欧美伊人久久大香线蕉综合69| 欧美精品一级二级| 久久精品一区二区| 亚洲资源在线观看| 精品综合久久久久久8888| 不卡视频在线看| 91精品欧美综合在线观看最新| 国产欧美日韩视频一区二区 | 日韩电影在线免费看| 国产高清不卡二三区| 在线日韩一区二区| 精品国产乱子伦一区| 一区二区在线观看不卡| 免费看欧美美女黄的网站| jlzzjlzz亚洲女人18| 制服丝袜一区二区三区| 欧美国产激情二区三区 | 色综合久久久久久久| 51久久夜色精品国产麻豆| 亚洲国产精品精华液ab| 亚洲国产视频网站| 精品一区二区久久| 欧美在线观看18| 国产日韩精品一区二区三区| 亚洲不卡在线观看| youjizz久久| 欧美本精品男人aⅴ天堂| 亚洲啪啪综合av一区二区三区| 美女被吸乳得到大胸91| 国产欧美精品区一区二区三区| 午夜电影久久久| 成人午夜精品一区二区三区| 日韩午夜激情视频| 亚洲美女一区二区三区| 国产精品一区二区免费不卡| 91精品国产一区二区| 亚洲精品国产高清久久伦理二区| 国产麻豆精品在线| 欧美一级片免费看| 夜夜揉揉日日人人青青一国产精品| 国产精品自拍网站| 欧美一区二区三区公司| 亚洲综合图片区| 北条麻妃国产九九精品视频| 久久久久高清精品| 蜜桃视频在线一区| 精品视频1区2区3区| 亚洲欧美色一区| 国产成人av电影免费在线观看| 欧美一区二区免费| 亚洲成人高清在线| 色一情一伦一子一伦一区| 国产精品麻豆一区二区| 国产精品一区二区在线观看不卡| 欧美成人在线直播| 美国十次综合导航| 777a∨成人精品桃花网| 香蕉成人伊视频在线观看| 日本电影欧美片| 亚洲精品日产精品乱码不卡| 成人av中文字幕| 国产精品少妇自拍| 国产不卡一区视频| 亚洲国产激情av| 99久久精品免费| 亚洲视频免费在线观看| 91在线视频观看| 自拍偷拍亚洲综合| 日本道免费精品一区二区三区| 亚洲欧美欧美一区二区三区| 色悠久久久久综合欧美99| 最近日韩中文字幕| 色婷婷精品久久二区二区蜜臀av| 亚洲三级久久久| 色噜噜狠狠色综合中国| 亚洲一区二区三区四区五区黄 | 精品成人一区二区三区四区| 美女视频免费一区| 精品区一区二区| 精品在线观看视频| 国产三级久久久| 99在线精品观看| 一二三区精品视频| 欧美精品日韩一区| 另类调教123区| 久久欧美中文字幕| 成人a级免费电影| 一区二区三区国产豹纹内裤在线 | 国产农村妇女毛片精品久久麻豆| 懂色av中文字幕一区二区三区 | 日韩一级完整毛片| 寂寞少妇一区二区三区| 国产婷婷色一区二区三区四区 | 北条麻妃国产九九精品视频| 亚洲免费视频中文字幕| 欧美日韩亚洲国产综合| 精品一区二区三区在线观看| 国产精品美女一区二区三区| 99精品久久99久久久久| 天天综合网 天天综合色| 精品日韩在线一区| 成人黄动漫网站免费app| 亚洲在线一区二区三区| 日韩一区二区三| 成人性视频网站| 夜夜嗨av一区二区三区中文字幕| 欧美精品久久99| 国产精品99久| 亚州成人在线电影| 久久精品视频在线看| 色999日韩国产欧美一区二区| 婷婷国产v国产偷v亚洲高清| 亚洲国产精品传媒在线观看| 欧美日本一区二区三区四区| 国产精品一级在线| 亚洲成人三级小说| 久久精品一区二区| 欧美日韩综合色| 福利一区二区在线| 日韩av不卡一区二区| 中文字幕在线免费不卡| 欧美一区三区二区| 91在线精品一区二区| 老司机精品视频导航| 亚洲摸摸操操av| 2023国产精品视频| 在线一区二区三区做爰视频网站| 激情偷乱视频一区二区三区| 亚洲一二三区不卡| 日本一区二区三区在线观看| 欧美少妇一区二区| 成人黄色免费短视频| 久久av资源站| 亚洲一区二三区| 欧美国产激情一区二区三区蜜月| 欧美精品日韩一本| 色94色欧美sute亚洲线路一久| 国产美女久久久久| 日韩专区中文字幕一区二区| 国产精品美女一区二区在线观看| 日韩午夜在线观看视频| 欧美午夜免费电影| 91美女在线看| 波多野结衣精品在线| 国产精品影视在线| 热久久一区二区| 亚洲综合一区二区| 国产精品久久久久久一区二区三区 | 色8久久精品久久久久久蜜| 国产成人精品www牛牛影视| 日韩vs国产vs欧美| 午夜精品影院在线观看| 亚洲精品高清在线| 自拍偷拍欧美精品| 国产精品视频免费| 欧美国产精品中文字幕| 亚洲精品在线观| 日韩一区二区电影网| 欧美日韩国产高清一区二区| 国产精品久久久久久一区二区三区| 2021中文字幕一区亚洲| 欧美一级日韩免费不卡| 欧美一级生活片| 日韩欧美一区中文|