试验二_基本图元生成算法_第1页
试验二_基本图元生成算法_第2页
试验二_基本图元生成算法_第3页
试验二_基本图元生成算法_第4页
试验二_基本图元生成算法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二 基本图元的生成算法一、实验目的1、初步了解显示窗口与视区的关系2、掌握OpengGL点、直线、多边形的绘制3、掌握DDAft线生成算法。4、掌握Bresenham直线生成算法二、实验环境硬件要求:PC机,主流配置,最好为独立显卡,显存 512M以上。软件环境:操作系统:Windows XR语言开发工具:VC6.0O三、实验内容与要求1、调出实验一的源代码运行,调整修改使得显示窗口大小改变时,绘制的矩形大小随之改变。如图2-1所示。提示:(1)在main函数里添加注册窗口变化函数glutReshapeFunc(myreshape); (放在 glutMainLoop()之前)(2)在程序

2、中添加窗口改变子函数,参数 w,h为当前显示窗口的宽和高 void myreshape(GLsizei w, GLsizei h)glViewport(0,0,w,h); /设置视区位置glMatrixMode(GL_PROJECTION);设置投影变换模式glLoadIdentity(); /调单位矩阵,清空当前矩阵堆栈if(w=h)gluOrtho2D(0,300,0,300*(GLfloat)h/(GLfloat)w); /设置裁剪窗口大小 elsegluOrtho2D(0,300*(GLfloat)w/(GLfloat)h,0,300);a)显示窗口改变前b)显示窗口变大后图2-1未修

3、改前的初始源程序参考如下:/*my first program.cpp*/#include void display(void) glClear(GL_COLOR_BUFFER_BIT); / 刷新颜色缓冲区glRectf(0,0,0.5,0.5);glFlush(); /用于刷新命令队列和缓冲区,使所有尚未被执行的OpenG命令得到执行void main(int argc, char* argv)glutInit(&argc, argv); /初始化 GLU1WglutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); /设置显示模式glutInitWindowSi

4、ze(100, 200);glutCreateWindow(hello); /创建窗口,标题为 “ hello ”glutDisplayFunc(display); /用于绘制当前窗口glutMainLoop(); /表示开始运行程序,用于程序的结尾 2、自己参照讲义或教材按照自己的构思画二维平面图形,修改样本程序circle-algorithm.cpp将上面的矩形替换成自己构思的二维平面图形。注意顶点的顺序。参考函数:(1)、点绘制举例glPointSize(2.0) /点的大小设置glBegin(GL_POINTS);glColor3f(1.0,1.0,1.0);glVertex2f(-0

5、.5,-0.5); /顶点glColor3f(1.0,0.0,1.0);glVertex2f(-0.5,0.5);glColor3f(0.0,1.0,1.0);glVertex2f(0.5,0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glEnd()(2)、直线/三角形/四边形绘制举例glLineWidth(2.0);glBegin(GL_LINES);/ glBegin(GL_LINE_STRIP);/ glBegin(GL_LINE_LOOP);/ glBegin(GL_TRIANGLES);/ glBegin(GL_TRIANGLE_S

6、TRIP);/ glBegin(GL_TRIANGLE_FAN);/ glBegin(GL_QUADS);/ glBegin(GL_TRIANGLE_STRIP);glVertex2f(-0.5,0.5);glVertex2f(-0.5,-0.5);glColor3f(1.0,1.0,1.0);glVertex2f(-0.5,0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glEnd();(3)、多边形举例glBegin(GL_POLYGON);glVertex2f(-0.5,0.5);glVertex2f(-0.5,-0.5);glColor

7、3f(1.0,1.0,1.0);glVertex2f(0,-0.5);glColor3f(1.0,1.0,0.0);glVertex2f(0.5,-0.5);glVertex2f(0.5,0.5);glEnd();3、读懂DDAft线生成算法伪代码,并修改伪代码,使之变成可行的OpenGL 代码,验证DDAft线生成算法。DDAft线生成伪代码/x0,y0表示直线的起始点,x1,y1表示直线的终止点,color表示直线的绘制颜色void DDA_line(int x0, int y0, int x1, int y1,int color)int dx = x1 - x0, dy = y1 - y

8、0, k;float xIncrement , yIncrement ,steps, x = x0, y = y0; if (abs (dx) abs (dy)steps = abs (dx);else steps = abs (dy);xIncrement = (float) (dx) /steps;yIncrement = (float) (dy) /steps;for (k =0; k=1的情况,又有斜率|k|1的情况,你可 以使用学过的画直线方法,如DD序法。阅读样本程序,参见circle-algorithm.cpp :附:样本程序 circle-algoritm.cpp#includ

9、e #include #include #include / set some initial parameters, such as the center of the circle(cx,cy), the radius of the circle,int cx=150,cy=150,radius=80;void DDA_Line(int x1,int y1,int x2,int y2);void Bresenham_DrawLine(int x1,int y1,int x2,int y2);void NSidedPolygon( int n, int cx, int cy, int rad

10、ius);void Display( void );void Reshape( int w, int h);int main( int argc, char * argv)(glutInit(&argc, argv);glutInitWindowPosition(0, 0);glutInitWindowSize(window_width, window_height);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);glutCreateWindow(Circle Generation Algorithm);glutDisplayFunc(Display);glutReshapeFunc(Reshape);glutMainLoop();return 0;)void Display( void )(/* YOUR CODE HERE */glutSwapBuffers();)void Reshape( int w, int h)glMatrixMode(GL_PROJECTION);glLoadIdentity();glViewport(0, 0, w, h);gluOrtho2D(0, w, 0, h);/ glutPostRedisplay();void DDA_Line(int x1,int y1,int x2,int y2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论