计算机图形学OpenGL实验一Word文档格式.doc
《计算机图形学OpenGL实验一Word文档格式.doc》由会员分享,可在线阅读,更多相关《计算机图形学OpenGL实验一Word文档格式.doc(4页珍藏版)》请在冰点文库上搜索。
课程代码
实验时间
实验地点
批改意见
成绩
教师签字:
一、实验目的
1.理解图形元素显示的基本原理,掌握扫描转换直线段的常用算法原理,扫描转换圆弧的常用算法原理。
2.熟悉glut常用几个功能函数
3.熟悉glut的函数回调机制
4.掌握绘制不同大小和颜色的点的方法
5.掌握绘制不同线型和颜色的直线的方法(直线,折线,环线)
6.掌握绘制彩色多边形边框的方法(各种设备)
7.熟悉OpenGL的编程环境(OpenGL+GlUT/SDK/MFC+C++)
二、实验内容
1.绘制框架流程。
2.分别实现港口起重机、工程车、等设备的绘制。
3.颜色的设置要合适,且易于更换。
#include<
math.h>
gl/glut.h>
intSCREEN_HEIGHT=480;
//屏幕高度
//跟踪鼠标点击次数,达到3次后绘制Bezier曲线
intNUMPOINTS=0;
//点
classPoint{
public:
floatx,y;
voidsetxy(floatx2,floaty2){x=x2;
y=y2;
}
constPoint&
operator=(constPoint&
rPoint){
x=rPoint.x;
y=rPoint.y;
return*this;
}
};
Pointabc[3];
voidmyInit(){
glClearColor(0.0,0.0,0.0,0.0);
glColor3f(1.0,0.0,0.0);
glPointSize(4.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,640.0,0.0,480.0);
}
voiddrawDot(intx,inty){
glBegin(GL_POINTS);
glVertex2i(x,y);
glEnd();
glFlush();
voiddrawLine(Pointp1,Pointp2){
glBegin(GL_LINES);
glVertex2f(p1.x,p1.y);
glVertex2f(p2.x,p2.y);
//计算下一个Bezier曲线上的点
PointdrawBezier(PointA,PointB,PointC,doublet){
PointP;
P.x=pow((1-t),2)*A.x+2*t*(1-t)*B.x+pow(t,2)*C.x;
P.y=pow((1-t),2)*A.y+2*t*(1-t)*B.y+pow(t,2)*C.y;
returnP;
voidmyMouse(intbutton,intstate,intx,inty){
//左键按下
if(button==GLUT_LEFT_BUTTON&
&
state==GLUT_DOWN){
//存储鼠标点击的点
abc[NUMPOINTS].setxy((float)x,(float)(SCREEN_HEIGHT-y));
NUMPOINTS++;
//绘制红点
drawDot(x,SCREEN_HEIGHT-y);
//绘制Bezier曲线
if(NUMPOINTS==3){
glColor3f(1.0,1.0,1.0);
//绘制控制多边形
drawLine(abc[0],abc[1]);
drawLine(abc[1],abc[2]);
PointPOld=abc[0];
//绘制Bezier曲线段,控制t的增量可以控制曲线精度
for(doublet=0.0;
t<
=1.0;
t+=0.1){
PointP=drawBezier(abc[0],abc[1],abc[2],t);
drawLine(POld,P);
POld=P;
}
glColor3f(1.0,0.0,0.0);
NUMPOINTS=0;
}
}
voidmyDisplay(){
glClear(GL_COLOR_BUFFER_BIT);
intmain(intargc,char*argv[]){
glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(640,480);
glutInitWindowPosition(100,150);
glutCreateWindow("
BezierCurve"
);
glutMouseFunc(myMouse);
glutDisplayFunc(myDisplay);
myInit();
glutMainLoop();
return0;