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

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

?? scene.cpp

?? file code.zip are used to implement ray tracing technology.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "scene.h"

#define CLOSE(X, Y)		(fabs((X) - (Y)) < 0.00001)

Scene::Scene(string fname)   
{ //constructor that also reads in an SDL file 
		Scene(); read(fname); 
} 


void Scene::freeScene()  
{ // release the object and light lists 
	GeomObj *p = obj; 
	while(p) 
	{ 
		GeomObj* q = p; 
		p = p->next; 
		delete q; 
	} 
	Light * q = light; 
	while(q) 
	{ 
		Light* r = q; 
		q = q->next; 
		delete r; 
	} 
} 

string Scene::nexttoken(void) 
{
	char c;
	string token;
	int lastchar = 1;
	if (!f_in) {return(token); }
	if (f_in->eof()) {return(token);}
	while (f_in->get(c))
	{
		if (f_in->eof()) {
			return(token);
		}
		switch (c) {
		case '\n': nextline += 1;
		case ' ' :
		case '\t':
		case '\a':
		case '\b':
		case '\v':
		case '\f':
		case '\r': {
			if ( lastchar == 0 ) {return(token);}break; }
		case '{': {
			token = c; return(token); break;}
		case '}': {
			token = c;
			return(token);
			break; }
		case '!': {
			while ( c != '\n' && f_in->get(c)) {
			}
			nextline++; break;}
		default: {
			token = token + c;
			lastchar = 0;

			if ((f_in->peek() == '{') ||
				(f_in->peek() == '}') ) {
				if ( lastchar == 0 ) {
					return(token);
				} else {
					f_in->get(c);
					token = c;
					return(token);
				}
			}
			line = nextline;
					}
		}
	}
	return(" ");
} 

//<<<<<<<<<<<<<<< Scene :: read >>>>>>>>>>>>>>>> 
bool Scene:: read(string fname)// return true if ok; else false 
{ 
	file_in = new ifstream(fname.c_str()); 
	if(!(*file_in)) 
	{  
		cout << "I can't find or open file: " << fname << endl;  
		return false; 
	} 
	f_in = new strstream(); 
	line = nextline = 1; 
	def_stack = new DefUnitStack(); 
	char ch; 
	freeScene(); //delete any previous scene 
	 
	// initialize all for reading: 
	obj = tail = NULL; 
	light = NULL; 
	affStk.tos = new AffineNode; 
	affStk.tos->next = NULL; 
	 
	while (file_in->get(ch)) {*f_in << ch;} // read whole file 
	while(1) //read file, collecting objects, until EOF or an error 
	{ 
		GeomObj * shp = getObject(); // get the next shape 
		if(!shp) break; // no object: either error or EOF 
		shp->next = NULL; // to be safe 
		if(obj == NULL){ obj = tail = shp;} // empty list so far 
		else{tail->next = shp; tail = shp;} // add new object to queue 
	}	
	file_in->close(); 
	cleanUp(); // delete temp lists, etc. 
	return true; 
} 

float Scene::getFloat() 
{ 
	strstream tmp; 
	float number; 
	string str = nexttoken();   
		tmp << str; 
	if(!(tmp >> number)) 
	{ 
		cerr << "Line " << line << ": error getting float" << endl; 
		exit(-1); 
	} 
	else  
	{ 
		char t; 
		if ( (tmp >> t ) )  
		{ 
			cerr << "Line " << line << ": bum chars in number" << endl; 
			exit(-1);     
		}  
	} 
	return number; 
} 

bool Scene::isidentifier(string keyword) { 
	string temp = keyword; 
	if (!isalpha(temp[0])) return(false); 
	for (unsigned int count = 1; count < temp.length(); count++) { 
		if ((!isalnum(temp[count]))&& (temp[count]!='.')) return(false); 
	} 
	return(true); 
} 

void Scene::cleanUp()  
{
	// release stuff after parsing file 
	affStk.releaseAffines(); 		//delete affine stack 
	def_stack->release(); 
	delete def_stack; // release the DefUnitStack memory 
} 


Scene::TokenType Scene::whichtoken(string keyword)  
{ 
	string temp = keyword; 
	if ( temp == "light" )            return (LIGHT); 
	if ( temp == "rotate" )           return (ROTATE); 
	if ( temp == "translate" )        return (TRANSLATE); 
	if ( temp == "scale")             return (SCALE); 
	if ( temp == "push")        	  return (PUSH); 
	if ( temp == "pop")				  return (POP); 
	if ( temp == "identityAffine")    return (IDENTITYAFFINE); 
	if ( temp == "cube")              return (CUBE); 
	if ( temp == "sphere")            return (SPHERE); 
	if ( temp == "torus")             return (TORUS); 
	if ( temp == "plane")             return (PLANE); 
	if ( temp == "checkerboard")      return (CHECKERBOARD); 
	if ( temp == "square")            return (SQUARE); 
	if ( temp == "cylinder")          return (CYLINDER); 
	if ( temp == "taperedCylinder")   return (TAPEREDCYLINDER); 
	if ( temp == "cone")              return (CONE); 
	if ( temp == "tetrahedron")       return (TETRAHEDRON);
	if ( temp == "octahedron")        return (OCTAHEDRON); 
	if ( temp == "dodecahedron")      return (DODECAHEDRON); 
	if ( temp == "icosahedron")       return (ICOSAHEDRON); 
	if ( temp == "buckyball")         return (BUCKYBALL); 
	if ( temp == "diamond")           return (DIAMOND); 
	if ( temp == "teapot")			  return (TEAPOT); 
	if ( temp == "union")             return (UNION); 
	if ( temp == "intersection")      return (INTERSECTION); 
	if ( temp == "difference")        return (DIFFERENCEa); 
	if ( temp == "mesh")              return (MESH);
	if ( temp == "makePixmap")        return (MAKEPIXMAP); 
	if ( temp == "defaultMaterials")  return (DEFAULTMATERIALS); 
	if ( temp == "ambient")           return (AMBIENT); 
	if ( temp == "diffuse")           return (DIFFUSE); 
	if ( temp == "specular")          return (SPECULAR); 
	if ( temp == "specularFraction")  return (SPECULARFRACTION); 
	if ( temp == "surfaceRoughness")  return (SURFACEROUGHNESS); 
	if ( temp == "emissive")          return (EMISSIVE); 
	if ( temp == "specularExponent")  return (SPECULAREXPONENT);
	if ( temp == "speedOfLight")      return (SPEEDOFLIGHT); 
	if ( temp == "transparency")      return (TRANSPARENCY); 
	if ( temp == "reflectivity")      return (REFLECTIVITY); 
	if ( temp == "parameters")        return (PARAMETERS); 
	if ( temp == "texture")			  return (TEXTURE); 
	if ( temp == "globalAmbient")	  return (GLOBALAMBIENT); 
	if ( temp == "minReflectivity")	  return (MINREFLECTIVITY); 
	if ( temp == "minTransparency")	  return (MINTRANSPARENCY); 
	if ( temp == "maxRecursionDepth") return (MAXRECURSIONDEPTH); 
	if ( temp == "background")        return (BACKGROUND); 
	if ( temp == "{")                 return (LFTCURLY); 
	if ( temp == "}")                 return (RGHTCURLY); 
	if ( temp == "def")               return (DEF); 
	if ( temp == "use")               return (USE); 
    if ( temp == "eye")				  return (EYE);
    if ( temp == "lookAt")			  return (LOOKAT);
    if ( temp == "up")				  return (UP);
    if ( temp == "nearPlane")		  return (NEARPLANE);
    if ( temp == "farPlane")		  return (FARPLANE);
    if ( temp == "viewAngle")		  return (VIEWANGLE);
	if ( temp == " " )                return (T_NULL); 
	if ( isidentifier(temp) )         return (IDENT); 
	//cout << temp << ":" << temp.length() << endl; 
	return(UNKNOWN);
}

// <<<<<<<<<<<<<< Scene :: getObject >>>>>>>>>>>>>>>
GeomObj* Scene :: getObject() 
{ //reads tokens from stream f_in (a data member of Scene), 
	// building lights, getting materials, doing transformations, 
	// until it finds a new object 
	// returns NULL if any error occurs, or end of file 
	string s;			 
	GeomObj * newShape; 
	TokenType typ; 
	while ((typ = (whichtoken( s = nexttoken() ))) != T_NULL)  
	{ 
		if(typ == UNION || typ == INTERSECTION || typ == DIFFERENCEa) 
		{ 
			switch(typ)
			{
			case UNION:				newShape = new UnionBool();	break;
			case INTERSECTION:		newShape = new IntersectionBool();	break;
			case DIFFERENCEa:		newShape = new DifferenceBool();break;
			} // end of little switch
			GeomObj* p = newShape;
			p = getObject(); // get left child
			if(!p) return NULL; // Error! should always get an object
			((Boolean*)newShape)->left  = p; // hook it up
			p = getObject();// get right child
			if(!p) return NULL;
			((Boolean*)newShape)->right = p; // hook it up
			return newShape;
		}// end of if(typ == UNION etc.... 

		switch(typ)  
		{ 
		case LIGHT: { 
			Point3 p; 
			Color3 c; 
			p.x = getFloat(); p.y = getFloat();	p.z = getFloat(); 
			c.red = getFloat(); c.green = getFloat();	c.blue = getFloat(); 
			Light *l = new Light; 
			l->setPosition(p); 
			l->setColor(c); 
			l->next = light; //put it on the list 
			light = l; break;} 
		case ROTATE: { 
			float angle; 
			Vector3 u; 
			angle = getFloat(); u.x = getFloat();  
			u.y = getFloat(); u.z = getFloat(); 
			affStk.rotate(angle,u);break;} 
		case TRANSLATE: { 
			Vector3 d; 
			d.x = getFloat(); d.y = getFloat(); d.z = getFloat(); 
			affStk.translate(d);break;} 
		case SCALE: { 
			float sx, sy, sz; 
			sx = getFloat(); sy = getFloat(); sz = getFloat(); 
			affStk.scale(sx, sy, sz);break;} 
		case PUSH: affStk.dup(); break;  
		case POP:  affStk.popAndDrop(); break; 
		case IDENTITYAFFINE: affStk.setIdentity();break;		 
		case AMBIENT: { 
			float dr, dg, db; 
			dr = getFloat(); dg = getFloat(); db = getFloat(); 
			currMtrl.ambient.set(dr,dg,db); break;} 
		case DIFFUSE: { 
			float dr,dg,db; 
			dr = getFloat(); dg = getFloat(); db = getFloat(); 
			currMtrl.diffuse.set(dr,dg,db); break;} 
		case SPECULAR:{  
			float dr,dg,db; 
			dr = getFloat(); dg = getFloat(); db = getFloat(); 
			currMtrl.specular.set(dr,dg,db); break;} 
		case EMISSIVE: { 
			float dr,dg,db; 
			dr = getFloat(); dg = getFloat(); db = getFloat(); 
			currMtrl.emissive.set(dr,dg,db); break;} 
		case PARAMETERS: { // get a list of numParams parameters 
			currMtrl.numParams = (int)getFloat(); 
			for(int i = 0; i < currMtrl.numParams; i++) 
				currMtrl.params[i] = getFloat(); 
			break;}			 
		case SPECULARFRACTION: currMtrl.specularFraction = getFloat(); break; 
		case SURFACEROUGHNESS: currMtrl.surfaceRoughness = getFloat(); break; 
		case TEXTURE: { // get type, 0 for none 
				currMtrl.textureType = (int)getFloat();} 
				break; 
		case DEFAULTMATERIALS: 	currMtrl.setDefault();break; 
		case SPEEDOFLIGHT: currMtrl.speedOfLight = getFloat(); break; 
		case SPECULAREXPONENT: currMtrl.specularExponent = getFloat(); break; 
		case TRANSPARENCY:currMtrl.transparency = getFloat(); break; 
		case REFLECTIVITY: currMtrl.reflectivity = getFloat(); break; 
		case GLOBALAMBIENT: 
			ambient.red = getFloat(); ambient.green = getFloat(); 
			ambient.blue = getFloat(); break; 
		case BACKGROUND:  
			background.red = getFloat(); 
			background.green = getFloat();  
			background.blue = getFloat();break; 
		case MAKEPIXMAP: {	// get BMP file name for a pixmap
			// to be implemented, along the lines:
			int which = getFloat();// index of this pixmap in pixmap array
			if(which < 0 || which > 7){cout << "\nbad index of RGBpixmap!\n";}
			string fname = nexttoken(); // get file name for mesh
			
			
			if(!pixmap[which].readBMPFile(fname))
			{// read BMP file into this pixmap
			cout << " \ncan't read that RGBpixmap file!\n";
			return NULL;  }
			pixmap[which].setTexture (currMtrl.textureType );
			pixmap[which].draw();
			/*GeomObj * p= newShape;

			p = getObject();
			
			if( p == new Plane) {
				pixmap[which].getObj(p);
				
				bindTexture(currMtrl.textureType );
				}*/
			
			
			
			break;}// end of case: MAKEPIXMAP
		case MINREFLECTIVITY: minReflectivity = getFloat(); break; 
		case MINTRANSPARENCY:minTransparency = getFloat(); break; 
		case MAXRECURSIONDEPTH: maxRecursionDepth = (int)getFloat(); break; 
		case T_NULL: break; // The null token represents end-of-file  
		case DEF: { 
			string name, temp, lb, rb; 
			int l = line; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美自拍丝袜亚洲| 亚洲欧洲日产国产综合网| 欧美精品一区二区三区蜜桃 | 日韩精品自拍偷拍| 国产亚洲精品福利| 午夜免费久久看| 懂色av一区二区三区免费看| 欧美日韩一区 二区 三区 久久精品| 欧美变态凌虐bdsm| 亚洲一区欧美一区| 不卡一区二区三区四区| 日韩欧美电影在线| 亚欧色一区w666天堂| 99精品视频在线观看| 亚洲精品一线二线三线无人区| 亚洲国产一区二区三区青草影视| 国产jizzjizz一区二区| 精品国产成人系列| 日韩电影在线一区二区三区| 色999日韩国产欧美一区二区| 久久综合成人精品亚洲另类欧美 | 91在线国产福利| 久久夜色精品一区| 美女爽到高潮91| 欧美日韩大陆一区二区| 亚洲乱码国产乱码精品精98午夜| 大白屁股一区二区视频| 久久久影视传媒| 激情小说欧美图片| 欧美videos中文字幕| 蜜臀av一级做a爰片久久| 欧美日韩一区高清| 亚洲第一搞黄网站| 欧美亚洲日本国产| 亚洲一二三四区不卡| 91蜜桃在线观看| 亚洲欧美日韩在线| 色综合天天综合| 国产乱理伦片在线观看夜一区| 欧美成人性战久久| 韩国三级电影一区二区| 欧美精品一区二区三区蜜桃视频| 久久不见久久见免费视频1| 日韩视频永久免费| 理论片日本一区| 久久众筹精品私拍模特| 国产一区二区免费在线| 国产亚洲综合性久久久影院| 懂色av一区二区三区免费看| 国产精品美日韩| 色8久久精品久久久久久蜜| 亚洲一区二区三区视频在线播放| 欧美日韩一区久久| 久久爱www久久做| 国产欧美日本一区二区三区| 成人18视频日本| 亚洲美女淫视频| 欧美绝品在线观看成人午夜影视| 日韩精品福利网| 2024国产精品| av一区二区不卡| 亚洲成人动漫在线免费观看| 91精品国产综合久久福利软件| 另类小说一区二区三区| 国产偷国产偷亚洲高清人白洁| www.av精品| 日韩中文字幕91| 国产欧美日韩综合精品一区二区| 99免费精品在线观看| 日韩在线一区二区三区| 久久精品日产第一区二区三区高清版| 成人免费黄色大片| 亚州成人在线电影| 亚洲国产高清在线| 欧美精品v国产精品v日韩精品| 韩国女主播成人在线| 亚洲人妖av一区二区| 日韩一区二区免费在线观看| 国产成人综合亚洲网站| 午夜精品福利一区二区蜜股av| 久久久久久久综合| 欧美三级日韩在线| 国产jizzjizz一区二区| 日本三级亚洲精品| 亚洲狠狠丁香婷婷综合久久久| 欧美一区二区免费视频| 色视频一区二区| 国产在线播放一区| 五月激情综合婷婷| 自拍偷在线精品自拍偷无码专区| 日韩一区二区三区在线| 色综合婷婷久久| 成人性色生活片| 狠狠色狠狠色综合日日91app| 亚洲影院理伦片| 国产精品久久久久久福利一牛影视| 3atv一区二区三区| 欧美三级视频在线观看| eeuss影院一区二区三区| 国产精品一区在线观看乱码| 日本欧美大码aⅴ在线播放| 一区二区三区产品免费精品久久75| 国产午夜精品福利| 精品国产在天天线2019| 欧美蜜桃一区二区三区 | 久久成人免费电影| 亚洲国产精品成人久久综合一区| 欧美大肚乱孕交hd孕妇| 911国产精品| 欧美精品日日鲁夜夜添| 欧美三级中文字幕在线观看| www.日韩av| av亚洲精华国产精华精| 成人免费毛片片v| 国产aⅴ精品一区二区三区色成熟| 免费高清在线一区| 另类人妖一区二区av| 免费成人在线影院| 另类调教123区| 麻豆一区二区99久久久久| 免费观看30秒视频久久| 美女尤物国产一区| 狠狠色丁香久久婷婷综| 国产在线一区二区| 国产九九视频一区二区三区| 国产伦精品一区二区三区在线观看| 久久精品99国产精品日本| 久久99久久99精品免视看婷婷| 日本怡春院一区二区| 美女诱惑一区二区| 国产在线精品免费| 国产成人综合网| 成人福利视频网站| 色综合一区二区| 欧美伦理影视网| 日韩欧美123| 国产欧美视频在线观看| 亚洲男人天堂av网| 亚洲成人久久影院| 久久爱www久久做| 成人av一区二区三区| 色综合中文综合网| 亚洲动漫第一页| 秋霞国产午夜精品免费视频| 久久国产精品99久久久久久老狼| 国内精品写真在线观看| 国产91丝袜在线播放九色| 91首页免费视频| 91精选在线观看| 国产午夜一区二区三区| 一区二区三区四区激情| 日本视频免费一区| thepron国产精品| 欧美丰满少妇xxxxx高潮对白| 2020国产精品自拍| 亚洲另类色综合网站| 免费的成人av| 色婷婷亚洲精品| 欧美成人免费网站| 亚洲精品久久久蜜桃| 激情综合网激情| 欧美综合亚洲图片综合区| 精品成人在线观看| 亚洲综合在线电影| 成人性生交大合| 日韩一级视频免费观看在线| 中文字幕亚洲区| 久久精品国产在热久久| 色94色欧美sute亚洲线路一ni| 欧美精品一区二区精品网| 亚洲另类在线视频| 成人免费视频免费观看| 制服丝袜激情欧洲亚洲| 亚洲女爱视频在线| 国产a区久久久| 日韩精品在线一区二区| 亚洲综合成人在线| 国产精品一区二区三区乱码| 91精品国产乱码久久蜜臀| 亚洲同性同志一二三专区| 国产在线视频一区二区| 欧美精品三级日韩久久| 亚洲最新在线观看| 国产成人免费在线观看| 精品久久久久一区二区国产| 亚洲成av人综合在线观看| a美女胸又www黄视频久久| 国产三级精品三级在线专区| 七七婷婷婷婷精品国产| 欧美精品高清视频| 亚洲国产色一区| 日本丰满少妇一区二区三区| 国产精品丝袜在线| 国产精品 欧美精品| www国产成人| 欧美三区在线观看| 亚洲综合一二区| 91视频xxxx| 一区二区三区在线免费播放| 91丝袜美女网|