⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 raytraceview.cpp

📁 蒙特卡罗方法可以有效地解决复杂的工程问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		Face4->Transform( vecOffset,vecRotate );
		Face4->SetMaterial(gold);
		Face4->SetTexture(map);
		
		Face5->nObjectIndex = 6;
		Face5->Transform( vecOffset,vecRotate );
		Face5->SetMaterial(gold);
		Face5->SetTexture(map);
		
		Face6->nObjectIndex = 7;
		Face6->Transform( vecOffset,vecRotate );
		Face6->SetMaterial(gold);
		Face6->SetTexture(map);
		
		//景物3,球体1
		CSphere *sp = new CSphere( CVector(-30,10,80), 15 );
		sp->nObjectIndex = 8;
		sp->SetTexture( map2 );
		sp->SetMaterial( def );
		
		//景物4,球体2
		CSphere *sp2 = new CSphere( CVector(30,10,20), 10 );
		sp2->nObjectIndex = 9;
		sp2->SetTexture( map2 );
		sp2->SetMaterial( def );
		
		//光源1,2,3
		CVector location1(15000.,50.,10000.);
		CVector location2(-110.,-3600.,500.);
		CVector location3(15000.,500.,1000);
		CVector intens(0.995,0.995,0.995);
		
		CLight* Lit1 = new CSphereLight(location1,intens);
		Lit1->nLightIndex = 1;
		
		CLight* Lit2 = new CSphereLight(location2,intens);
		Lit2->nLightIndex = 2;
		
		CLight* Lit3 = new CSphereLight(location3,intens);
		Lit2->nLightIndex = 3;
		
		//场景操作
		
		//添加光源
		scene.AppendLight(Lit1);
		scene.AppendLight(Lit2);
		scene.AppendLight(Lit3);
		
		//添加物体 
		scene.AppendObject(grnd);	
		scene.AppendObject(Face1);
		scene.AppendObject(Face2);
		scene.AppendObject(Face3);
		scene.AppendObject(Face4);
		scene.AppendObject(Face5);
		scene.AppendObject(Face6);
		scene.AppendObject(sp);	
		scene.AppendObject(sp2);
		
		//绘制
		scene.BeginTrace();
		
		//删除光源
		scene.DeleteLight(Lit1);
		scene.DeleteLight(Lit2);
		scene.DeleteLight(Lit3);
		
		//删除物体
		scene.DeleteObject(grnd);
		scene.DeleteObject(sp);
		scene.DeleteObject(sp2);
		scene.DeleteObject(Face1);
		scene.DeleteObject(Face2);
		scene.DeleteObject(Face3);
		scene.DeleteObject(Face4);
		scene.DeleteObject(Face5);
		scene.DeleteObject(Face6);
		
		delete sp;	   sp = NULL;
		delete sp2;    sp2 = NULL;
		delete grnd;   grnd = NULL; 
		delete gold;   gold = NULL; 
		delete Face1;  Face1 = NULL; 
		delete Face2;  Face2 = NULL; 
		delete Face3;  Face3 = NULL; 
		delete Face4;  Face4 = NULL; 
		delete Face5;  Face5 = NULL; 
		delete Face6;  Face6 = NULL; 
		delete Lit1;   Lit1 = NULL; 
		delete Lit2;   Lit2 = NULL; 
		delete Lit3;   Lit3 = NULL; 
		delete map;	   map = NULL;
		delete map2;   map2 = NULL;
		delete def;	   def = NULL; 
		delete def2;   def2 = NULL; 
		
		//在客户区绘图
		CClientDC dc(this);
		
		for(int i = 0; i < scene.nXRes; i++ )
			for(int j = 0; j < scene.nYRes; j++ )
				for(int k = 0; k < 3; k++ )
				{
					dc.SetPixel( i,j,COLORREF(scene.rgb[i][j][0]*255,scene.rgb[i][j][1]*255,scene.rgb[i][j][2]*255) );
					TRACE("%f\n",scene.rgb[i][j][0]*255);
				}
				
				CString str;				
				str.Format("场景1_%d",ii/2);
				str += ".bmp";
				
				//保存客户区图片至文件
				SavePicture( m_strPath + str );
				ii += 2;	
				}
				//隐藏进度条
				pFrame->SendMessage(WM_SET_PROGRESS, 0);
				
				m_bDrawing = false;
}

#endif MANY


#ifdef ONE
void CRayTraceView::RayTracing()
{
	//获得框架类指针
	CMainFrame* pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
	
	pFrame->SendMessage(WM_SET_STATUS_TEXT, 1, 1 );	
	
	//初始化材料
	CMaterial* def = new CMaterial(CVector(0.5,0.5,0.5),
		CVector(0.85,0.85,0.85),//(0.15,0.35,0.65),
		CVector(0.05,0.05,0.05),//0.6
		CVector(0.,0.,0.),
		211,1.,FALSE,FALSE);
	
	CMaterial* def2 = new CMaterial(CVector(0.5,0.5,0.5),
		CVector(0.85,0.85,0.85),//(0.15,0.35,0.65),
		CVector(0.05,0.05,0.05),//0.6
		CVector(0.,0.,0.),
		211,1.,FALSE,TRUE);
	
	CMaterial* gold = new CMaterial(CVector(0.1,0.1,0.1),
		CVector(0.8, 0.498039, 0.196078),//(0.25,0.45,0.95),//(0.65,0.65,0.65),
		CVector(0.8,0.5,0.2),//0.6
		CVector(0.,0.,0.),
		1511,1.,FALSE,FALSE);
	
	//初始化纹理
	CImage* map = new CImage( m_strPath + "ashwood.bmp" );
	CImage* map2 = new CImage( m_strPath + "cloud2.bmp" );
	
	//景物1,地面
	CGround* grnd = new CGround;
	grnd->nObjectIndex = 1;
	grnd->SetMaterial( def );
	
	//景物2,长方体,由六个面Face1,Face2,Face3,Face4,Face5,Face6组成
	CQuadra* Face1 = new CQuadra(
		CVector(-50.,0.,50.),
		CVector(50.,0.,50.),
		CVector(50.,50.,50.),
		CVector(-50.,50.,50.)
		);
	
	CQuadra* Face2 = new CQuadra(
		CVector(-50.,0.,0.),
		CVector(50.,0.,0.),
		CVector(50.,50.,0.),
		CVector(-50.,50.,0.)
		);
	
	CQuadra* Face3 = new CQuadra(
		CVector(-50.,0.,0.),
		CVector(-50.,0.,50.),
		CVector(-50.,50.,50.),
		CVector(-50.,50.,0.)
		);
	
	CQuadra* Face4 = new CQuadra(
		CVector(-50.,50.,50.),
		CVector(50.,50.,50.),
		CVector(50.,50.,0.),
		CVector(-50.,50.,0.)
		);
	
	CQuadra* Face5 = new CQuadra(
		CVector(-50.,0.,0.),
		CVector(50.,0.,0.),
		CVector(50.,0.,50.),
		CVector(-50.,0.,50.)
		);
	
	CQuadra* Face6 = new CQuadra(
		CVector(50.,0.,50.),
		CVector(50.,0.,0.),
		CVector(50.,50.,0.),
		CVector(50.,50.,50.)
		);
	
	CVector vecOffset(0,0.,0.),vecRotate(0.,0.,50);
	Face1->nObjectIndex = 2;
	Face1->Transform( vecOffset,vecRotate );
	Face1->SetMaterial(gold);
	Face1->SetTexture(map);
	
	Face2->nObjectIndex = 3;
	Face2->Transform( vecOffset,vecRotate );
	Face2->SetMaterial(gold);
	Face2->SetTexture(map);
	
	Face3->nObjectIndex = 4;
	Face3->Transform( vecOffset,vecRotate );
	Face3->SetMaterial(gold);
	Face3->SetTexture(map);
	
	Face4->nObjectIndex = 5;
	Face4->Transform( vecOffset,vecRotate );
	Face4->SetMaterial(gold);
	Face4->SetTexture(map);
	
	Face5->nObjectIndex = 6;
	Face5->Transform( vecOffset,vecRotate );
	Face5->SetMaterial(gold);
	Face5->SetTexture(map);
	
	Face6->nObjectIndex = 7;
	Face6->Transform( vecOffset,vecRotate );
	Face6->SetMaterial(gold);
	Face6->SetTexture(map);
	
	//景物3,球体1
	CSphere *sp = new CSphere( CVector(-30,10,80), 15 );
	sp->nObjectIndex = 8;
	sp->SetTexture( map2 );
	sp->SetMaterial( def );
	
	//景物4,球体2
	CSphere *sp2 = new CSphere( CVector(30,10,20), 10 );
	sp2->nObjectIndex = 9;
	sp2->SetTexture( map2 );
	sp2->SetMaterial( def );
	
	//光源1,2,3
	CVector location1(15000.,50.,10000.);
	CVector location2(-110.,-3600.,500.);
	CVector location3(15000.,500.,1000);
	CVector intens(0.995,0.995,0.995);
	
	CLight* Lit1 = new CSphereLight(location1,intens);
	Lit1->nLightIndex = 1;
	
	CLight* Lit2 = new CSphereLight(location2,intens);
	Lit2->nLightIndex = 2;
	
	CLight* Lit3 = new CSphereLight(location3,intens);
	Lit2->nLightIndex = 3;
	
	//场景操作
	
	//添加光源
	scene.AppendLight(Lit1);
	scene.AppendLight(Lit2);
	scene.AppendLight(Lit3);
	
	//添加物体 
	scene.AppendObject(grnd);	
	scene.AppendObject(Face1);
	scene.AppendObject(Face2);
	scene.AppendObject(Face3);
	scene.AppendObject(Face4);
	scene.AppendObject(Face5);
	scene.AppendObject(Face6);
	scene.AppendObject(sp);	
	scene.AppendObject(sp2);
	
	//绘制
	scene.BeginTrace();
	
	//删除光源
	scene.DeleteLight(Lit1);
	scene.DeleteLight(Lit2);
	scene.DeleteLight(Lit3);
	
	//删除物体
	scene.DeleteObject(grnd);
	scene.DeleteObject(sp);
	scene.DeleteObject(sp2);
	scene.DeleteObject(Face1);
	scene.DeleteObject(Face2);
	scene.DeleteObject(Face3);
	scene.DeleteObject(Face4);
	scene.DeleteObject(Face5);
	scene.DeleteObject(Face6);
	
	delete sp;	   sp = NULL;
	delete sp2;    sp2 = NULL;
	delete grnd;   grnd = NULL; 
	delete gold;   gold = NULL; 
	delete Face1;  Face1 = NULL; 
	delete Face2;  Face2 = NULL; 
	delete Face3;  Face3 = NULL; 
	delete Face4;  Face4 = NULL; 
	delete Face5;  Face5 = NULL; 
	delete Face6;  Face6 = NULL; 
	delete Lit1;   Lit1 = NULL; 
	delete Lit2;   Lit2 = NULL; 
	delete Lit3;   Lit3 = NULL; 
	delete map;	   map = NULL;
	delete map2;   map2 = NULL;
	delete def;	   def = NULL; 
	delete def2;   def2 = NULL; 
	
	//在客户区绘图
	CClientDC dc(this);
	
	for(int i = 0; i < scene.nXRes; i++ )
		for(int j = 0; j < scene.nYRes; j++ )
			for(int k = 0; k < 3; k++ )
			{
				dc.SetPixel( i,j,RGB(scene.rgb[i][j][0]*255,scene.rgb[i][j][1]*255,scene.rgb[i][j][2]*255) );
			}
			
			CString str;				
			str.Format("场景NEW");
			str += ".bmp";
			
			//保存客户区图片至文件
			SavePicture( m_strPath + str );
			//隐藏进度条
			pFrame->SendMessage(WM_SET_PROGRESS, 0);
			
			m_bDrawing = false;
}
#endif

void CRayTraceView::RayTracing2()
{
	//获得框架类指针
	CMainFrame* pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
	
	int num = 1;
	
	for( int ii = 50; ii > -70; )
	{
		pFrame->SendMessage( WM_SET_STATUS_TEXT,  num, 60 );
		
		//初始化材料
		CMaterial* def = new CMaterial(CVector(0.5,0.5,0.5),
			CVector(0.85,0.85,0.85),//(0.15,0.35,0.65),
			CVector(0.05,0.05,0.05),//0.6
			CVector(0.,0.,0.),
			211,1.,FALSE,FALSE);
		
		//初始化纹理
		CImage* map2 = new CImage( m_strPath + "cloud2.bmp" );
		
		//景物1,地面
		CGround* grnd = new CGround;
		grnd->nObjectIndex = 1;
		grnd->SetMaterial( def );
		
		//景物3,球体
		CSphere *sp = new CSphere( CVector(-30,10,80), 15 );
		sp->nObjectIndex = 2;
		sp->SetTexture( map2 );
		sp->SetMaterial( def );
		sp->Transform( CVector(0,0,ii), CVector(0,0,0) );
		
		//光源1 2 3
		CVector location1(15000.,50.,10000.);
		CVector intens(0.995,0.995,0.995);
		
		CLight* Lit1 = new CSphereLight(location1,intens);
		Lit1->nLightIndex = 1;
		
		//场景操作
		
		//添加光源
		scene.AppendLight(Lit1);
		
		//添加物体 
		scene.AppendObject(grnd);	
		scene.AppendObject(sp);	
		
		//绘制
		scene.BeginTrace();
		
		//删除光源
		scene.DeleteLight(Lit1);
		
		//删除物体
		scene.DeleteObject(grnd);
		scene.DeleteObject(sp);
		
		delete sp;	   sp = NULL;
		delete map2;   map2 = NULL;
		delete def;	   def = NULL; 
		delete Lit1;   Lit1 = NULL; 
		
		//在客户区绘图
		CClientDC dc(this);
		
		for(int i = 0; i < scene.nXRes; i++ )
			for(int j = 0; j < scene.nYRes; j++ )
				for(int k = 0; k < 3; k++ )
					dc.SetPixel( i,j,RGB(scene.rgb[i][j][0]*255,scene.rgb[i][j][1]*255,scene.rgb[i][j][2]*255) );
				
				CString str;				
				str.Format("场景2_%d",num);
				str += ".bmp";
				SavePicture( m_strPath + str );
				ii -= 2;
				num++;
				
	}
	//隐藏进度条
	pFrame->SendMessage(WM_SET_PROGRESS, 0);
	
	m_bDrawing = false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -