




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验实验 2 直线生成算法实现直线生成算法实现 1 实验目的实验目的 理解基本图形元素光栅化的基本原理 掌握一种基本图形元素光栅化算法 利用 0penGL 实现直线光栅化的 DDA 算法 2 实验内容实验内容 1 根据所给的直线光栅化的示范源程序 在计算机上编译运行 输出正确结果 2 指出示范程序采用的算法 以此为基础将其改造为中点线算法或 Bresenham 算法 写 入实验报告 3 根据示范代码 将其改造为圆的光栅化算法 写入实验报告 4 了解和使用 OpenGL 的生成直线的命令 来验证程序运行结果 3 实验原理实验原理 示范代码原理 DDA 算法 下面介绍 OpenGL 画线的一些基础知识和 glutReshapeFunc 函数 1 数学上的直线没有宽度 但 0penGL 的直线则是有宽度的 同时 OpenGL 的直线必须 是有限长度 而不是像数学概念那样是无限的 可以认为 OpenGL 的 直线 概念与数学上 的 线段 接近 它可以由两个端点来确定 这里的线由一系列顶点顺次连接而成 有闭合 和不闭合两种 前面的实验已经知道如何绘 点 那么 OpenGL 是如何知道拿这些顶点来做什么呢 是依次画出来 还是连成线 或者构成一个多边形 或是做其他事情 为了解决这一问题 OpenGL 要求 指定顶点的命令必须包含在 glBegin 函数之后 glEnd 函数之前 否则指定的顶 点将被忽略 并由 glBegin 来指明如何使用这些点 例如 glBegin GL P0INTS glVertex2f 0 0f 0 0f glVertex2f 0 5f 0 0f glEnd 则这两个点将分别被画出来 如果将 GL POINTS 替换成 GL LINES 则两个点将被认为是 直线的两个端点 OpenGL 将会画出一条直线 还可以指定更多的顶点 然后画出更复杂的 图形 另一方面 glBegin 支持的方式除了 GL POINTS 和 GL LINES 还有 GL LINE STRIP GL LINE L0 P GL TRIANGLES GL TRIANGLE STRIP GL TRIANGLE FAN 等几何图元 2 首次打开窗口 移动窗口和改变窗口大小时 窗口系统都将发送一个事件 以通知程 序员 如果使用的是 GLUT 通知将自动完成 并调用向 glutReshapeFunc 注册的函数 该 函数必须完成下列工作 重新建立用作新渲染画布的矩形区域 定义绘制物体时使用的坐标系 如 void Reshape int w int h glViewport 0 0 GLsizei w GLsizei h glMatrixMode GL PROJECTION glLoadIdentity gluOrtho2D 0 0 GLdouble w 0 0 Gldouble h 在 GLUT 内部 将给该函数传递两个参数 窗口被移动或修改大小后的宽度和高度 单 位为像素 glViewport 调整像素矩形 用于绘制整个窗口 接下来三个函数调整绘图坐标 系 使左下角坐标为 0 0 右上角坐标为 w h 4 实验代码实验代码 include void SetPixel int x int y 画点 glBegin GL POINTS glVertex2i x y 设置点坐标 glEnd void swap int a int b 交换函数 int temp a a b b temp int abs int a int b if a b return a b else return b a void Bres Line int x0 int y0 int x1 int y1 Bresenham 算法 glColor3f 1 0f 0 0f 0 0f SetPixel x0 y0 int dx abs x1 x0 200 int dy abs y1 y0 300 if dx 0 int flag 0 if dx0 1 1 int ty y1 y0 0 1 1 int curx x0 int cury y0 int dS 2 dy int dT 2 dy dx int d dS dx while curx x1 if d 0 d dS else cury ty d dT glPointSize 2 if flag SetPixel cury curx else SetPixel curx cury curx tx void LineDDA int x0 int y0 int x1 int y1 int color float x y float m dy dx dx x1 x0 dy y1 y0 m dy dx y y0 glColor3f 1 0f 1 0f 1 0f glPointSize 2 for x x0 x x1 x SetPixel x y 0 5 y m void Cirpot int x0 int y0 int x int y SetPixel x0 x y0 y SetPixel x0 y y0 x SetPixel x0 y y0 x SetPixel x0 x y0 y SetPixel x0 x y0 y SetPixel x0 y y0 x SetPixel x0 y y0 x SetPixel x0 x y0 y void BresCricle int x0 int y0 double r glColor3f 0 0f 0 0f 1 0f int x y d x 0 y int r d int 3 2 r while x y Cirpot x0 y0 x y if d 0 d 4 x 6 else d 4 x y 10 y x if x y Cirpot x0 y0 x y void myDisplay void glClear GL COLOR BUFFER BIT glColor3f 1 0f 0 0f 1 0f glRectf 25 0 25 0 75 0 75 0 glPointSize 1 glBegin GL POINTS glColor3f 0 0f 1 0f 0 0f glVertex2f 100 0f 200 0f glEnd LineDDA 0 0 200 300 点线 BresCricle 100 200 100 Bres Line 0 0 300 100 glBegin GL LINES glColor3f 1 0f 0 0f 0 0f glVertex2f 100 0f 0 0f glColor3f 0 0f 1 0f 0 0f glVertex2f 180 0f 240 0f glEnd glFlush void Init glClearColor 0 0 0 0 0 0 0 0 glShadeModel GL SMOOTH void Reshape int w int h glViewport 0 0 GLsizei w GLsizei h glMatrixMode GL PROJECTION glLoadIdentity gluOrtho2D 0 0 GLdouble w 0 0 GLdouble h 坐标系定义 int main int argc char argv glutInit glutInitDisplayMode GLUT RGB GLUT SINGLE glutInitWindowPosition 100 100 glutInitWindowSize 400 400 glutCreateWindow Hello World Init glutDisplayFunc myDispla
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中介商铺租赁协议书模板
- 卤菜店招工合同范本模板
- 厂房隔音罩销售合同范本
- 商用仓储租用协议书范本
- 合作无接触配送合同范本
- 停车场招聘临时合同范本
- 倒签的劳动合同补充协议
- 双方共同开店合作协议书
- 商铺延期租赁协议书模板
- 商铺出售后出租合同范本
- 2025年湖南湘西自治州州直事业单位招聘考试笔试试卷附答案
- 幼儿园安全责任书及后勤管理制度
- 消防车辆事故课件
- 2026届四川省宜宾市普通高中高一化学第一学期期末统考试题含解析
- 《2型糖尿病中医防治指南(2024版)》解读课件
- 剑阁县普安镇污水处理厂扩容建设项目环评报告
- 商务楼宇管理办法
- 肺炎护理试题填空及答案
- 社用手机管理办法
- 心电监护操作常见并发症预防及处理
- 学校食堂各种检查记录表格表册11
评论
0/150
提交评论