广工图形学实验OpenGL开发环境及扫描转换算法.doc_第1页
广工图形学实验OpenGL开发环境及扫描转换算法.doc_第2页
广工图形学实验OpenGL开发环境及扫描转换算法.doc_第3页
广工图形学实验OpenGL开发环境及扫描转换算法.doc_第4页
全文预览已结束

下载本文档

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

文档简介

计算机 学院 计算机科学与技术 专业 班 学号 姓名 协作者 教师评定 实验一 OpenGL开发环境及扫描转换算法1、 实验目的与要求1. 通过实验掌握OpenGL中编程环境的设置,了解相关函数用途及设置步骤;2. 通过实验掌握基本图形元素的生成,给出相关代码和运行结果;3. 用WINDOWS GDI函数编写生成直线或区域填充的程序,演示算法过程。2、 实验方案1)实验一画的图片是一个笑脸,主要是实现了画圆的函数,这个函数可以画任意分之一的圆,这样就使得在画笑脸的时候能够很容易的实现了下面咧嘴的图形。首先是画一个圆,里面用黄的填充,形成了整体的脸;其次是画两个眼睛,里面填充黑色;最后是画嘴巴,先画一个半圆,里面填充黑色,再在黑色的半圆中画一个红的的小半圆,从而形成一个咧嘴。 2)实验二画的是一把扇子,主要也是用上面的一个实验中实现的画圆函数绘制扇子;先是用两个部分圆面画出一个扇面;再用几个等宽的部分圆围绕一个圆心排列在扇形的下弧下面,形成了扇骨;最后是画出扇子的扇骨部分的那个小圆环,那个用来固定扇骨的,这个是用连个同心圆叠加在一起形成的。3、 实验结果和数据处理1)实验一的代码实现: #include#include#includeint width,height;#define W (width/2)#define H (height/2)void myArc(int x,int y,int a,int b,int start_angle,int end_angle,double fr,double fg,double fb) int angle; const double pi = acos(-1); glBegin(GL_TRIANGLE_FAN); glColor3d(fr,fg,fb); glVertex2i(x,y); for(angle = start_angle; angle = end_angle; angle = angle + 1) int px = x + a*cos(angle/180.0 *pi); int py = y + b*sin(angle/180.0 *pi); glVertex2i(px,py); glEnd();void myCircle(int x,int y,int radius,double fr,double fg,double fb) myArc(x,y,radius,radius,0,360,fr,fg,fb);void display() glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT); myCircle(0,0, 1*W,1,1,0); myArc( 0*W, -0.2*W, 5*W/7, 5*W/7, 180,360,0,0,0); myArc( 0*W, -0.3*W, 5*W/9, 5*W/9, 180,360,1,0,0); myCircle(-0.5*W,0.3*W,0.2*W,0,0,0); myCircle( 0.5*W,0.3*W,0.2*W,0,0,0); glFlush();int main(int argc,char *argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow(笑脸); glutInitWindowSize(width=400,height=400); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-width/2,width/2,-height/2,height/2); glutDisplayFunc(display); glutMainLoop(); return 0; 2)实验一运行的效果截图如下(图为一个笑脸): 3)实验三的的代码实现: #include#include#includeint width,height;#define W (width/2)#define H (height/2)void myArc(int x,int y,int a,int b,int start_angle,int end_angle,double fr,double fg,double fb) int angle; const double pi = acos(-1); glBegin(GL_TRIANGLE_FAN); glColor3d(fr,fg,fb); glVertex2i(x,y); for(angle = start_angle; angle = end_angle; angle = angle + 1) int px = x + a*cos(angle/180.0 *pi); int py = y + b*sin(angle/180.0 *pi); glVertex2i(px,py); glEnd();void myCircle(int x,int y,int radius,double fr,double fg,double fb) myArc(x,y,radius,radius,0,360,fr,fg,fb);void display()int i; glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT); myArc( 0*W,-0.5*W, 1.3*W, 1.3*W, 40,140,0,0,1); myArc( 0*W,-0.5*W, 0.35*W, 0.35*W, 40,140,1,1,1); for(i = 40; i = 140; i = i + 8) myArc( 0*W,-0.5*W, 0.35*W, 0.35*W, i, i+4, 0,1,0); myArc( 0*W,-0.485*W, 0.03*W, 0.03*W, 0, 360, 1,0,0); myArc( 0*W,-0.485*W, 0.01*W, 0.01*W, 0, 360, 1,1,1); glFlush();int main(int argc,char *argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutCreateWindow(扇子); glutInitWindowSize(width=400,height=400); glMatrixMode(GL_PROJECTIO

温馨提示

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

最新文档

评论

0/150

提交评论