正交投影 (图形学)
}
4、动画按钮函数
void CTestView::OnPlay()//动画按钮函数
{
// TODO: Add your command handler code here
bPlay=bPlay?FALSE:TRUE;
if(bPlay)//设置定时器
SetTimer(1,150,NULL);
else
KillTimer(1);
P[2].x=+a;P[2].y=+a;P[2].z=-a;
P[3].x=-a;P[3].y=+a;P[3].z=-a;
P[4].x=-a;P[4].y=-a;P[4].z=+a;
P[5].x=+a;P[5].y=-a;P[5].z=+a;
P[6].x=+a;P[6].y=+a;P[6].z=+a;
if(bPlay)
{
pCmdUI->SetCheck(TRUE);
pCmdUI->SetText("停止");
}
else
{
pCmdUI->SetCheck(FALSE);
pCmdUI->SetText("开始");
}
}
tran.RotateY(Beta);
Invalidate(FALSE);
CView::OnTimer(nIDEvent);
}
6、动画按钮控制状态函数
void CTestView::OnUpdatePlay(CCmdUI* pCmdUI)//动画按钮状态函数
{
// TODO: Add your command update UI handler code here
算
法
描
述
及
实
验
步
骤
1、读入立方体的8个顶点构成的顶点表与6个表面构成的表面表;
2、使用正交投影矩阵在屏幕坐标系内绘制立方体的正投影,也即将立方体的z坐标取为零绘制其二维投影;
3、设计三维几何变换类CTransform,使用类对象旋转立方体;
4、使用双缓冲技术绘制立方体旋转动画。
调
试
过
程
及
实
验
结
果
总
结
{
ScreenP=P[F[nFace].vI[nPoint]];
if(0==nPoint)
{
line->MoveTo(pDC,ScreenP);
t=ScreenP;
}
else
line->LineTo(pDC,ScreenP);
}
line->LineTo(pDC,t);//闭合多边形
}
delete line;
1.会绘制立方体线框模型;
2.掌握了立方体二维正交投影图的绘制、旋转方法。
附
录
1、立方体点表
void CTestView::ReadPoint()//点表
{
//顶点的三维坐标(x,y,z),立方体边长为2a
double a=150;
P[0].x=-a;P[0].y=-a;P[0].z=-a;
P[1].x=+a;P[1].y=-a;P[1].z=-a;
P[7].x=-a;P[7].y=+a;P[7].z=+a;
}
2、立方体面表
void CTestView::ReadFace()//面表
{
//面的顶点数和面的顶点索引
F[0].SetNum(4);F[0].vI[0]=4;F[0].vI[1]=5;F[0].vI[2]=6;F[0].vI[3]=7;//前面
void CTestView::DrawObject(CDC* pDC)//绘制立方体线框
{
CP3 ScreenP,t;
CLine *line=new CLine;
for(int nFace=0;nFace<6;nFace++)//面循环
{
for(int nPoint=0;nPoint<F[nFace].vN;nPoint++)//顶点循环
课程名称
计算机图形学
班级
实验日期
2014/5/19
姓名
学号
实验成绩
实验名称
正交投影算法
实
验
目
的
及
要
求
1.学习立方体的几何模型;
2.学习了解正交投影变换矩阵;
3.熟悉立方体线框模型绘制方法。
实
验
环
境
VC++6.0
实
验
内
容
在屏幕客户区中心绘制立方体的二维正交投影线框图,通过工具栏的“动画”图标按钮旋转立方体
F[1].SetNum(4);F[1].vI[0]=0;F[1].vI[1]=3;F[1].vI[2]=2;F[1].vI[3]=1;//后面
F[2].SetNum(4);F[2].vI[0]=0;F[2].vI[1]=4;F[2].vI[2]=7;F[2].vI[3]=3;//左面
F[3].SetNum(4);F[3].vI[0]=1;F[3].vI[1]=2;F[3].vI[2]=6;F[3].vI[3]=5;//右面
}
5、定时器处理函数
void CTestView::OnTimer(UINT nIDEvent)//定时器处理函数
{
// TODO: Add your message handler code here and/or call default
Alpha=5;Beta=5;
tran.RotateX(Alpha);
F[4].SetNum(4);F[4].vI[0]=2;F[4].vI[1]=3;F[4].vI[2]=7;F[4].vI[3]=6;//顶面
F[5].SetNum(4);F[5].vI[0]=0;F[5].vI[1]=1;F[5].vI[2]=5;F[5].vI[3]=4;//底面}3、绘制 Nhomakorabea方体线框模型