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

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

?? gui3d3.cpp

?? 人工智能遺傳算法,經過改進,希望對大家有幫助,常常聯系啊.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <fstream.h>
#include "gui16.h"

//****************************************************************************
//CPointList implement!!!
//****************************************************************************
CPointList::CPointList(UINT s)
{	topPos = 0;
	if(s <= 300000)
	{	size = s;
		points = new POINT3D[size];
		shouldConvert = new CHAR[size];
	}
	else
	{	points = NULL;
		shouldConvert = NULL;
	}

}

CPointList::~CPointList()
{	if(points != NULL)
		delete[] points;
	if(shouldConvert != NULL)
		delete[] shouldConvert;
}

BOOL CPointList::operator!()
{	if(points != NULL && shouldConvert != NULL)
		return TRUE;
	else
		return FALSE;
}

BOOL CPointList::copy(CPointList* l)
{	if(size != l->size)
		return FALSE;
	topPos = l->topPos;
	memcpy( points, l->points, topPos*sizeof(POINT3D) );
	memcpy( shouldConvert, l->shouldConvert, topPos*sizeof(CHAR) );
	return TRUE;
}

int CPointList::addPoint(POINT3D* p)
{	if(topPos < size)
	{	points[topPos] = *p;
		topPos++;
		return topPos - 1;
	}
	else
		return -1;
}

int CPointList::addPointAt(UINT pos,POINT3D* p)
{	if(pos < size)
	{	points[pos] = *p;
		if(topPos <= pos)
			topPos = pos + 1;
		return pos;
	}
	else
		return -1;
}

void CPointList::clearConvert()
{	memset( shouldConvert, 0, sizeof(CHAR)*topPos );
}

void CPointList::convertPoints(CONVERT_MATRIX3D* m,CPLCFLAG f)
{	UINT i;
	if(f == CONVERTALL)
	{	POINT3D* p=points;
		for(i=0;i<topPos;i++)
			dotConvert(p++,m);
	}
	else
	{	CHAR* cp=shouldConvert;
		for(i=0;i<topPos;i++)
			if(*cp++)
				dotConvert(points+i,m);
	}
}

void CPointList::scalePoints(CONVERT_MATRIX3D* m,CPLCFLAG f)
{	UINT i;
	if(f == CONVERTALL)
	{	POINT3D* p=points;
		for(i=0;i<topPos;i++)
			dotScale(p++,m);
	}
	else
	{	for(i=0;i<topPos;i++)
			if(shouldConvert[i])
				dotScale(points+i,m);
	}
}

void CPointList::rotatePoints(CONVERT_MATRIX3D* m,CPLCFLAG f)
{	UINT i;
	if(f == CONVERTALL)
	{	POINT3D* p=points;
		for(i=0;i<topPos;i++)
			dotRotate(p++,m);
	}
	else
	{	for(i=0;i<topPos;i++)
			if(shouldConvert[i])
				dotRotate(points+i,m);
	}
}

void CPointList::movePoints(CONVERT_MATRIX3D* m,CPLCFLAG f)
{	UINT i;
	if(f == CONVERTALL)
	{	POINT3D* p=points;
		for(i=0;i<topPos;i++)
			dotMove(p++,m);
	}
	else
	{	for(i=0;i<topPos;i++)
			if(shouldConvert[i])
				dotMove(points+i,m);
	}
}

//******************************************************************************
//CFaceList implement!!!
//******************************************************************************
CFaceList::CFaceList(UINT s)
{	topPos = 0;
	if(s <= 800000)
	{	size = s;
		faces = new TRIANGLE3D[size];
		shouldConvert = new CHAR[size];
	}
	else
	{	faces = NULL;
		shouldConvert = NULL;
	}
}

CFaceList::~CFaceList()
{	if(faces != NULL)
		delete[] faces;
	if(shouldConvert != NULL)
		delete[] shouldConvert;
}

BOOL CFaceList::operator!()
{	if(faces != NULL && shouldConvert != NULL)
		return TRUE;
	else
		return FALSE;
}

void CFaceList::clearConvert()
{	memset( shouldConvert, 0, sizeof(CHAR)*topPos );
}

int CFaceList::addTriangle(TRIANGLE3D* p)
{	if(topPos < size)
	{	faces[topPos] = *p;
		topPos++;
		return topPos - 1;
	}
	else
		return -1;
}

int CFaceList::addAsPolygon(POLYGON3D* p)
{	UINT pos = topPos;
	if(p->num < 3 || (pos > size - p->num))
		return -1;
	for(UINT i=0;i<=p->num - 3;i++)
	{	faces[topPos].p1 = p->points[i];
		faces[topPos].p2 = p->points[i+1];
		faces[topPos].p3 = p->points[i+2];
		topPos++;
	}
	return pos;
}

int CFaceList::addTriangleAt(UINT pos,TRIANGLE3D* p)
{	if(pos < size)
	{	faces[pos] = *p;
		if(topPos <= pos)
			topPos = pos + 1;
		return pos;
	}
	else
		return -1;
}

void CFaceList::updataParams(CPointList* ppl,CPLCFLAG f)
{	UINT i;
	if(f == CONVERTALL)
	{	TRIANGLE3D* p=faces;
		for(i=0;i<topPos;i++)
			fillTriangleParam(ppl,p++);
	}
	else
	{	CHAR* cp=shouldConvert;
		for(i=0;i<topPos;i++)
			if(*cp++)
				fillTriangleParam(ppl,faces+i);
	}
}

void CFaceList::judgeSide(CPointList* pl,POINT3D* pt)
{	UINT i;
	TRIANGLE3D* p=faces;
	char* pc=pl->shouldConvert;
	for(i=0;i<topPos;i++)
	{	if((p->a*pt->x + p->b*pt->y + p->c*pt->z + p->d) >= 0)
		{	shouldConvert[i] = -1;
			pc[p->p1] = -1;
			pc[p->p2] = -1;
			pc[p->p3] = -1;
		}
		p++;
	}
}

void CFaceList::calLightMirror(POINT3D* pot,CPointList* pt,UINT groundLight,UINT spotLight,CPLCFLAG f)
{	VECTOR3D l,v,h,n;
	float cos;
	UINT i,s,lps;
	float x1,y1,z1;
//	float zero=0,spl=spotLight;
	s = sizeof(TRIANGLE3D);
	if(f == CONVERTALL)
	{	TRIANGLE3D* p=faces;
		for(i=0;i<topPos;i++)
		{	x1 = pt->points[p->p1].x;
			y1 = pt->points[p->p1].y;
			z1 = pt->points[p->p1].z;
			l.x = pot->x - x1;
			l.y = pot->y - y1;
			l.z = pot->z - z1;
			vector3dToSTD(&l);
			v.x = 20-x1;
			v.y = 150-y1;
			v.z = 750-z1;
			vector3dToSTD(&v);
			h.x = l.x + v.x;
			h.y = l.y + v.y;
			h.z = l.z + v.z;
			vector3dToSTD(&h);
			n.x = p->a;
			n.y = p->b;
			n.z = p->c;
			vector3dToSTD(&n);
	//		cos = (n.x*h.x + n.y*h.y + n.z*h.z)
	//			  /(float)sqrt(n.x*n.x + n.y*n.y + n.z*n.z)
	//			  /(float)sqrt(h.x*h.x + h.y*h.y + h.z*h.z);
			cos = vectorDotMul(&n,&h);
			for(int i=0;i<7;i++)
				cos =cos*cos;
			if(cos > 0)
				p->light = groundLight + UINT(spotLight*cos);
			else
				p->light = groundLight;
			p++;
		}
	}
	else
	{	CHAR* cp=shouldConvert;
		for(i=0;i<topPos;i++)
			if(*cp++)
			{	x1 = pt->points[faces[i].p1].x;
				y1 = pt->points[faces[i].p1].y;
				z1 = pt->points[faces[i].p1].z;
				l.x = pot->x - x1;
				l.y = pot->y - y1;
				l.z = pot->z - z1;
				vector3dToSTD(&l);
				v.x = 20-x1;
				v.y = 150-y1;
				v.z = 750-z1;
				vector3dToSTD(&v);
				h.x = l.x + v.x;
				h.y = l.y + v.y;
				h.z = l.z + v.z;
		//		vector3dToSTD(&h);
				n.x = faces[i].a;
				n.y = faces[i].b;
				n.z = faces[i].c;
		//		vector3dToSTD(&n);
		//		cos = vectorDotMul(&n,&h);
				cos = (n.x*h.x + n.y*h.y + n.z*h.z)
					  /(float)sqrt((n.x*n.x + n.y*n.y + n.z*n.z)
					  *(h.x*h.x + h.y*h.y + h.z*h.z));
				cos = pow(cos,8);
				if(cos > 0)
					faces[i].light = groundLight + UINT(spotLight*cos);
				else
					faces[i].light = groundLight;
			}
	}
}

void CFaceList::calLightSpot(POINT3D* pot,CPointList* pt,UINT groundLight,UINT spotLight,CPLCFLAG f)
{	VECTOR3D v;
	UINT i,s,lps;
	long cos1;
	float cos,zero=0,spl=spotLight;
	s = sizeof(TRIANGLE3D);
	if(f == CONVERTALL)
	{	TRIANGLE3D* p=faces;
		for(i=0;i<topPos;i++)
		{	v.x = pt->points[p->p1].x - pot->x;
			v.y = pt->points[p->p1].y - pot->y;
			v.z = pt->points[p->p1].z - pot->z;
			vector3dToSTD(&v);
			cos = -(v.x*p->a + v.y*p->b + v.z*p->c)/
				(float)sqrt(p->a*p->a + p->b*p->b + p->c*p->c);
			if(cos > 0)
				p->light = groundLight + UINT(spotLight*cos);
			else
				p->light = groundLight;
			p++;
		}
	}
	else
	{	CHAR* cp=shouldConvert;
		for(i=0;i<topPos;i++)
			if(*cp++)
			{	v.x = pt->points[faces[i].p1].x - pot->x;
				v.y = pt->points[faces[i].p1].y - pot->y;
				v.z = pt->points[faces[i].p1].z - pot->z;
				vector3dToSTD(&v);
				cos = -(v.x*faces[i].a + v.y*faces[i].b + v.z*faces[i].c)/
				(float)sqrt(faces[i].a*faces[i].a + faces[i].b*faces[i].b + faces[i].c*faces[i].c);
				if(cos > 0)
					faces[i].light = groundLight + UINT(spotLight*cos);
				else
					faces[i].light = groundLight;
			}
	}
/*	__asm
	{	mov		eax,f
		mov		edx,this
		mov		ebx,[edx]this.faces
		mov		ecx,[edx]this.topPos
		cmp		eax,CONVERTALL
		mov		lps,ecx
		jne		short __else
		test	ecx,ecx
		mov		edx,v
		jz		__exit
__loopTop1:
		fld		[edx]v.x
		fmul	[ebx]TRIANGLE3D.a
		fld		[edx]v.y
		fmul	[ebx]TRIANGLE3D.b
		fld		[edx]v.z
		fmul	[ebx]TRIANGLE3D.c
		fxch	st(1)
		faddp	st(2),st(0)
		fld		[ebx]TRIANGLE3D.a
		fmul	st(0),st(0)
		fld		[ebx]TRIANGLE3D.b
		fmul	st(0),st(0)
		fld		[ebx]TRIANGLE3D.c
		fmul	st(0),st(0)
		fxch	st(1)
		faddp	st(2),st(0)
		faddp	st(1),st(0)
		fxch	st(1)
		faddp	st(2),st(0)
		fsqrt
		fdivp	st(1),st(0)
		fchs
		fcom	zero
		fnstsw	ax
		test	ah,65
		mov		eax,groundLight
		jne		short __s01
		fmul	spl
		frndint
		fistp	cos1
		add		eax,cos1
		mov		[ebx]TRIANGLE3D.light,eax
		jmp		short __loop1
__s01:
		fstp	cos1
		mov		[ebx]TRIANGLE3D.light,eax
__loop1:
		mov		eax,s
		dec		ecx
		lea		ebx,[ebx+eax]
		jnz		short __loopTop1
		jmp		short __exit
__else:
		test	ecx,ecx
		mov		ecx,[edx]this.shouldConvert
		mov		edx,v
		jz		__exit
__loopTop2:
		mov		ax,WORD PTR [ecx]
		inc		ecx
		cmp		al,0
		je		__loop2
		fld		[edx]v.x
		fmul	[ebx]TRIANGLE3D.a
		fld		[edx]v.y
		fmul	[ebx]TRIANGLE3D.b
		fld		[edx]v.z
		fmul	[ebx]TRIANGLE3D.c
		fxch	st(1)
		faddp	st(2),st(0)
		fld		[ebx]TRIANGLE3D.a
		fmul	st(0),st(0)
		fld		[ebx]TRIANGLE3D.b
		fmul	st(0),st(0)
		fld		[ebx]TRIANGLE3D.c
		fmul	st(0),st(0)
		fxch	st(1)
		faddp	st(2),st(0)
		faddp	st(1),st(0)
		fxch	st(1)
		faddp	st(2),st(0)
		fsqrt
		fdivp	st(1),st(0)
		fchs
		fcom	zero
		fnstsw	ax
		test	ah,65
		mov		eax,groundLight
		jne		short __s02
		fmul	spl
		frndint
		fistp	cos1
		add		eax,cos1
		mov		[ebx]TRIANGLE3D.light,eax
		jmp		short __loop2
__s02:
		fstp	st(0)
		mov		[ebx]TRIANGLE3D.light,eax
__loop2:
		mov		eax,s
		dec		lps
		lea		ebx,[ebx+eax]
		jnz		short __loopTop2
__exit:
	}*/
}

void CFaceList::calLight(VECTOR3D* v,UINT groundLight,UINT spotLight,CPLCFLAG f)
{	UINT i,s,lps;
	long cos1;
	float cos,zero=0,spl=spotLight;
	s = sizeof(TRIANGLE3D);
	__asm
	{	mov		eax,f
		mov		edx,this
		mov		ebx,[edx]this.faces
		mov		ecx,[edx]this.topPos
		cmp		eax,CONVERTALL
		mov		lps,ecx
		jne		short __else
		test	ecx,ecx
		mov		edx,v
		jz		__exit
__loopTop1:
		fld		[edx]v.x
		fmul	[ebx]TRIANGLE3D.a
		fld		[edx]v.y
		fmul	[ebx]TRIANGLE3D.b
		fld		[edx]v.z

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品麻豆| 欧美成人艳星乳罩| 日韩欧美一区二区免费| 国产精品久久久一区麻豆最新章节| 亚洲午夜一二三区视频| 成人午夜免费视频| 精品国产第一区二区三区观看体验 | 欧美色图在线观看| 国产精品欧美久久久久无广告| 日本视频中文字幕一区二区三区| 97国产精品videossex| 久久综合久久综合亚洲| 日韩精品1区2区3区| 一本一道久久a久久精品| 中文字幕免费在线观看视频一区| 亚洲va中文字幕| 日本精品视频一区二区三区| 国产精品丝袜黑色高跟| 国产精品亚洲综合一区在线观看| 91精品欧美福利在线观看| 亚洲精品国产精华液| av电影天堂一区二区在线观看| 精品久久国产字幕高潮| 亚洲丶国产丶欧美一区二区三区| 色综合亚洲欧洲| 亚洲人成在线播放网站岛国| 不卡视频一二三四| 亚洲国产成人在线| 成人黄色一级视频| 亚洲已满18点击进入久久| 成人妖精视频yjsp地址| 国产日产精品1区| 成人精品免费看| 国产精品五月天| 成+人+亚洲+综合天堂| 国产精品久久久久久福利一牛影视| 国产成人免费xxxxxxxx| 国产拍欧美日韩视频二区| 成人精品国产免费网站| 亚洲欧美一区二区三区极速播放 | 午夜不卡在线视频| 91精品一区二区三区在线观看| 手机精品视频在线观看| 欧美一二三区在线观看| 免费高清不卡av| 日本一区二区成人| 色香蕉久久蜜桃| 日韩精品亚洲专区| 精品成人一区二区三区四区| 国产不卡高清在线观看视频| 亚洲欧美怡红院| 欧美人狂配大交3d怪物一区| 蜜臀av国产精品久久久久 | 亚洲欧美色图小说| 欧美裸体一区二区三区| 精品一区二区影视| 国产精品欧美久久久久无广告| 欧美最猛性xxxxx直播| 日本午夜精品视频在线观看| 国产欧美一区二区三区鸳鸯浴| 99久久精品情趣| 图片区小说区区亚洲影院| 综合av第一页| 欧美日韩精品一二三区| 国产一区二区成人久久免费影院| 亚洲日本成人在线观看| 日韩欧美一区在线观看| 成人免费高清在线| 午夜一区二区三区在线观看| 久久久久久久久蜜桃| 一道本成人在线| 国产成人综合亚洲91猫咪| 亚洲综合区在线| 国产午夜精品一区二区三区四区| 欧美天堂亚洲电影院在线播放| 看片的网站亚洲| 一区二区三区高清在线| 国产视频一区二区三区在线观看| 欧美性大战久久久| 成人一级黄色片| 久久国产精品99精品国产| 一级中文字幕一区二区| 国产三级一区二区| 这里只有精品视频在线观看| 成人的网站免费观看| 日本大胆欧美人术艺术动态| 18成人在线视频| 久久久91精品国产一区二区精品 | 成人成人成人在线视频| 精品一区二区三区香蕉蜜桃| 亚洲一区二区三区自拍| 中文字幕日韩精品一区| 久久亚洲二区三区| 日韩一区二区三区在线| 欧美少妇xxx| 在线视频综合导航| 波多野结衣在线一区| 精品系列免费在线观看| 丝袜脚交一区二区| 亚洲午夜一二三区视频| 亚洲一区二区三区四区在线| 中文字幕在线不卡国产视频| 国产校园另类小说区| 精品99999| 精品电影一区二区三区| 欧美一级黄色大片| 日韩一级片网址| 欧美一级生活片| 91精品国产乱码| 91麻豆精品国产| 欧美一级黄色录像| 欧美一区二区三区在线视频 | 色先锋久久av资源部| 色综合久久综合中文综合网| 97久久精品人人澡人人爽| 91丨porny丨蝌蚪视频| 成人免费视频视频在线观看免费| 国产毛片精品一区| 国产一区二区0| 国产美女一区二区| 成人午夜精品在线| 91在线porny国产在线看| 欧美中文字幕一区| 欧美久久一二区| 日韩三级伦理片妻子的秘密按摩| 日韩欧美自拍偷拍| 久久久国产午夜精品| 国产精品久久久久毛片软件| 国产精品福利av| 亚洲一级片在线观看| 午夜精品免费在线| 久久99在线观看| 国产成人精品综合在线观看| jlzzjlzz国产精品久久| 色婷婷综合久久久久中文一区二区 | 26uuu欧美日本| 国产日韩欧美不卡在线| 一区二区三区在线视频观看| 丝袜亚洲另类丝袜在线| 国产一区二区福利视频| www.视频一区| 欧美精品久久99久久在免费线 | 亚洲视频一区二区免费在线观看| 亚洲免费观看高清完整版在线观看 | 亚洲国产精品成人久久综合一区 | 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲综合色丁香婷婷六月图片| 日韩国产欧美在线观看| 国产精品亚洲人在线观看| 91一区一区三区| 欧美大片一区二区| 国产精品久久久久毛片软件| 午夜精品一区二区三区电影天堂 | 国产在线播放一区三区四| 99久久精品国产精品久久| 欧美精品自拍偷拍动漫精品| 久久综合久久鬼色| 一区二区高清免费观看影视大全 | 日韩**一区毛片| 成人黄色在线网站| 欧美videos大乳护士334| 亚洲色图另类专区| 韩国女主播一区| 欧美日韩一区不卡| 国产精品福利一区| 精品综合免费视频观看| 欧美影视一区在线| 国产欧美一区二区精品性| 五月天精品一区二区三区| 成人午夜视频网站| 精品99久久久久久| 日韩电影在线观看网站| 一本大道久久a久久综合| 久久久久国产精品人| 日韩国产一二三区| 精品视频免费在线| 1000部国产精品成人观看| 国产在线乱码一区二区三区| 欧美精品在线一区二区三区| 一区二区三区在线影院| 成人黄页在线观看| 欧美激情资源网| 国产一区二区导航在线播放| 日韩欧美成人午夜| 日韩电影免费一区| 欧美日韩一级二级| 亚洲欧美区自拍先锋| aaa亚洲精品一二三区| 国产欧美日韩亚州综合 | 日本午夜精品一区二区三区电影| 欧美午夜精品久久久久久超碰| 最近日韩中文字幕| 成人av在线资源网站| 国产精品二区一区二区aⅴ污介绍| 国产精品123| 久久久精品黄色| 成人在线综合网| 欧美激情一区三区| 成人免费看黄yyy456| 欧美激情一区二区在线|