当前位置:文档之家› 计算机图形学实验报告 (2)

计算机图形学实验报告 (2)

3.实验过程:
1)建立一个控制台应用程序,在RenderScene()函数中调用不同的系统函数分别绘制不同属性的点、线、折线、多边形、扇形等;
2)建立一个SDI程序,按照所给资料设置OpenGL图形绘制环境,并照敲老师所给实列,观看结果,查看关键代码区;
3)仿照所给列子,改写代码,绘制彩色的正方体;
2、掌握Bresenham或中点圆生成算法;
3、掌握Bresenham或中点椭圆生成算法;
三、
1、实现DDA、Bresenham直线生成算法;
2、实现Bresenham画圆法或中点画圆法;
3、实现Bresenham或中点法椭圆生成算法;
4、利用1、2、3实现的直线、圆、椭圆图形生成函数进行图形绘制;
中南大学信息科学与工程学院
实验报告
实 验 名 称
实 验 地 点科技楼四楼
实 验 日 期2014年6月
指 导 教 师
学 生 班 级
学 生 姓 名
学 生 学 号
提 交 日 期2014年6月
实验一
一、
二、
1、熟练使用实验主要开发平台VC6.0;
2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序;
if( ( point.x<rect.right ) && ( point.x>rect.left ) && ( point.y<rect.bottom ) && ( point.y>rect.top ) )
{
if( ( lButtonDownNotUp == TRUE )
{
regionRightBottomTemp = point;
float x = xa,y= ya;
if(abs(dx)>abs(dy))
Steps = abs(dx);
else
Steps = abs(dy);
xIncrement = dx/(float)Steps;
yIncrement = dy/(float)Steps;
pDC->SetPixel(ROUND(x),ROUND(y),RGB(255,0,0));
m_pDC->SetPixel(100,200,RGB(0,0,0));
m_pDC->TextOut(100,100);
2、画圆:
void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC)
{Hale Waihona Puke int dx = xb - xa;
int dy = yb - ya;
三.实验结果
基本图形显示正确
基本图形截图:
三棱柱截图:
实验四、二维图形变换程序设计
一.实验目的:
1)掌握图形变换实现原理,基本几何变换,复合变换等;
2)学习使用Visual C++开发菜单,对话框等交互界面的设计;
3)学习使用MFC单文档程序,实现二维图形的基本几何变换。
二.实验内容:
使用Visual C++建立一个单文档程序,采用实验二中定义的基本图形类。在程序中增加图形变换菜单(各基本变换对应菜单项),各图形变换的参数通过对话框提供(设计提供变换参数的对话框,如平移,旋转,比例等),实现二维图形的变换。(提示:在各个图形类中增加相应的成员函数实现平移;菜单选择变换弹出对应变换的参数对话框,对话框中提供参数后取出参数传递给图形对象,通过调用图形变换成员函数实现图形对象的变换)。要求实现直线段、圆、多边形等基本图形的几何变换。
三.实验过程:
(1).根据实验要求,新建菜单,增加二维图形变换子菜单,然后在菜单上添加平移,比例,对称,旋转以及错切选项。
(2).对菜单中的每一项方法构造响应函数,并给几个需要弹出对话框的选项添加对话框响应函数。
(3).在弹出的对话框输入参数,获取输入的参数,调用相应的变换函数,实现图形的变换。
四.实验结果:
int Steps, k;
float xIncrement,yIncrement;
float x = xa,y= ya;
if(abs(dx)>abs(dy))
Steps = abs(dx);
else
Steps = abs(dy);
xIncrement = dx/(float)Steps;
yIncrement = dy/(float)Steps;
3、掌握Window图形编程的基本方法;
4、学会使用基本绘图函数和Window GDI对象;
三、
创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求:
1、用户可以通过菜单选择绘图颜色;
2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形;
void Scale(double,double);//比例变换矩阵
void Scale(double,double,CP2);//相对于任意点的比例变换矩阵
3、所有图形的绘制算法都必须封装在CMyGL类中,如下图。
4、在View类中实例化一个CMyGL类的对象,比如m_gl,进行绘图操作。如下图所示:
5、用户通过点击“图形绘制”中不同的菜单项,在指定位置进行绘图。
五、
六、
1、画直线:
void CDraw::DDALine(CDC* pDC, int x1, int y1, int x2, int y2, COLORREF color)
pDC->SetPixel(-x+x0,-y+y0,color);
if(p>=0)
{
p+=4*aa*(1-y)+bb*(4*x+6);
y--;
}
else
{
p+= bb*(4*x+6);
}
x++;
}
x=a;y=0; p=2*aa+bb*(1-2*a);
while (bb*x>aa*y)
{
pDC->SetPixel(x+x0,y+y0,color);
结果正确。
平移xy(100, 0)
五、实验主要代码
class CTransform//二维几何变换
{
public:
CTransform();
virtual ~CTransform();
void SetMat(CP2 *,int);
void Identity();
void Translate(double,double);//平移变换矩阵
{
int x,y,p;
int aa=a*a,bb=b*b;
x=0;y=b; p=2*bb+aa*(1-2*b);
while (bb*x<=aa*y)
{
pDC->SetPixel(x+x0,y+y0,color);
pDC->SetPixel(-x+x0,y+y0,color);
pDC->SetPixel(x+x0,-y+y0,color);
{
regionLeftTopTemp = point;
}
CDialog::OnLButtonDown(nFlags, point);
}
void CRectangleDlg::OnMouseMove(UINT nFlags, CPoint point)
{
RECT rect;
m_showRectangle. GetClientRect( &rect );
}
y++;
}
}
实验三、OpenGL图形程序设计基础
一.实验目的
1)了解OpenGL图形库的功能和结构;
2)学习使用Visual C++开发基于控制台的图形程序;
3)学习使用Visual C++开发基于单文档(GUI界面)的图形程序。
4)学习使用OpenGL生成基本图形;
5)学习使用OpenGL实现图形变换;
x+=dx;
y+=dy;
}
}
2、画圆:
void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC)
{
int dx = xb - xa;
int dy = yb - ya;
int Steps, k;
float xIncrement,yIncrement;
pDC->SetPixel(ROUND(x),ROUND(y),RGB(0,0,0));
for(k=0;k<Steps;k++)
{
x +=xIncrement;
y +=yIncrement;
sleep(10);
pDC->SetPixel(ROUND(x),ROUND(y),RGB(0,0,0));
}
{
double dx,dy,e,x,y;
dx = x2 -x1;
dy = y2- y1;
e = (fabs(dx) > fabs(dy)) ? fabs(dx):fabs(dy);
dx/=e;
dy/=e;
x = x1;
y = y1;
for (int i=1;i<=e;i++)
{
pDC->SetPixel((int)(x+0.5),(int)(y+0.5),color);
相关主题