📄 raytraceview.cpp
字号:
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 + -