状态管理和绘制几何体(一)
2015-08-24 11:22
274 查看
状态管理和绘制几何体
绘图工具箱
清除窗口:在计算机中,保存图片的内存通常被计算机所绘制的前一幅图像所填充,因此在绘制新场景前,一般需要把它清楚为某背景颜色。像素颜色存储在名为位平面的图形硬件中采用两种存储方式:可以把像素颜色RGBA直接存储在位平面,也可以存储为一个颜色索引值,用它来饮用颜色查找表中的一个颜色项。
第一句把清楚颜色设置为黑色,第二句把整个窗口清除为当前清除颜色。
指定颜色
伪代码
红色绘制AB 蓝色绘制C 第四句代码无用
设置颜色 可以使用glColor3f()函数 函数接受三个参数 0-1之间浮点数,分别用来表示红绿蓝成分。0标示不使用这种成分 1标示最大限度使用。
强制完成绘图操作
OpenGL提供了glFlush()函数,强制客户机发送网络数据包,即使这个包并没有填满。这个函数并不等待绘图完成,只是强制绘图命令开始执行。因此保证以前所有的命令都在有限的时间内执行,即使在此之后并没有任何渲染命令需要执行。
坐标系统工具箱
无论是刚打开窗口还是以后移动窗口或者改变窗口大小的时候,窗口系统都会发送一个事件作为通知。如果使用的是GLUT,会自动产生通知,并且在glutReshapeFunc()种注册的那个函数被调用
另外 必须注册一个回调函数 完成下列这些任务
1. 重新建立一个矩形区域,把它作为新的渲染画布
2. 定义一个用于绘制物体的坐标系统
GLUT内核将向这个函数传递两个参数 标示经过改变之后窗口的高和宽。glViewport函数调整用于绘图的像素矩阵,使他占据整个新窗口。接下来的三行代码调整用于绘图的坐标系统,使左下角为(0,0),右上角为(w,h)。
2.2描述点直线和多边形
点:点可以用一组称为顶点的浮点数表示。所有的内部计算都是建立在把顶点看成是三维数据基础之上完成的。用户可以把顶点指定为二维形式z=0。
直线:表示一段线段。
多边形:线段构成的单闭合环,线段由端点位置的定点决定的。
指定顶点
在OpenGL中,所有的几何体最终都描述为一组有序的顶点 用glVertex()函数指定顶点。
该函数位于glBegin()和glEnd()之间才有效。
OpenGL几何图元
把一组顶点放在glBegin()和glEnd()之间,传递给glBegin()的参数决定了这些顶点所构建的几何图元的类型
glBegin()和glEnd()之间的使用Opengl函数是有限制的,一些特定函数可以在期间调用。包含其它编程语言不受限制
这段代码使用循环多次计算圆的每个顶点,不是最有效的绘制圆的方法。
绘图工具箱
清除窗口:在计算机中,保存图片的内存通常被计算机所绘制的前一幅图像所填充,因此在绘制新场景前,一般需要把它清楚为某背景颜色。像素颜色存储在名为位平面的图形硬件中采用两种存储方式:可以把像素颜色RGBA直接存储在位平面,也可以存储为一个颜色索引值,用它来饮用颜色查找表中的一个颜色项。
glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT);
第一句把清楚颜色设置为黑色,第二句把整个窗口清除为当前清除颜色。
指定颜色
伪代码
set_current_color(red); draw_object(A); draw_object(B); set_current_color(green); set_current_color(blue); draw_object(c);
红色绘制AB 蓝色绘制C 第四句代码无用
设置颜色 可以使用glColor3f()函数 函数接受三个参数 0-1之间浮点数,分别用来表示红绿蓝成分。0标示不使用这种成分 1标示最大限度使用。
强制完成绘图操作
OpenGL提供了glFlush()函数,强制客户机发送网络数据包,即使这个包并没有填满。这个函数并不等待绘图完成,只是强制绘图命令开始执行。因此保证以前所有的命令都在有限的时间内执行,即使在此之后并没有任何渲染命令需要执行。
坐标系统工具箱
无论是刚打开窗口还是以后移动窗口或者改变窗口大小的时候,窗口系统都会发送一个事件作为通知。如果使用的是GLUT,会自动产生通知,并且在glutReshapeFunc()种注册的那个函数被调用
另外 必须注册一个回调函数 完成下列这些任务
1. 重新建立一个矩形区域,把它作为新的渲染画布
2. 定义一个用于绘制物体的坐标系统
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)。
2.2描述点直线和多边形
点:点可以用一组称为顶点的浮点数表示。所有的内部计算都是建立在把顶点看成是三维数据基础之上完成的。用户可以把顶点指定为二维形式z=0。
直线:表示一段线段。
多边形:线段构成的单闭合环,线段由端点位置的定点决定的。
指定顶点
在OpenGL中,所有的几何体最终都描述为一组有序的顶点 用glVertex()函数指定顶点。
该函数位于glBegin()和glEnd()之间才有效。
OpenGL几何图元
把一组顶点放在glBegin()和glEnd()之间,传递给glBegin()的参数决定了这些顶点所构建的几何图元的类型
glBegin()和glEnd()之间的使用Opengl函数是有限制的,一些特定函数可以在期间调用。包含其它编程语言不受限制
#include "stdafx.h" const GLfloat PI = 3.1415926f; void myDisplay() { glBegin(GL_POLYGON); for(GLint i=0; i<100; i++) { GLfloat angle = 2*PI*i/100; glVertex2f(cos(angle),sin(angle)); } glEnd(); glFlush(); } int _tmain(int argc, _TCHAR* argv[]) { glutInit(&argc,(char**)argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100,100); glutInitWindowSize(250,250); glutCreateWindow("绘制一个圆"); glutDisplayFunc(&myDisplay); glutMainLoop(); return 0; }
这段代码使用循环多次计算圆的每个顶点,不是最有效的绘制圆的方法。
相关文章推荐
- JsonArray 遍历
- 奇妙的算法—k进制正整数的对k-1取余与按位取余
- 极客标签编程小挑战#31:生成注册页面的显示效果
- Structs2笔记③--局部类型转换案例
- JavaWeb笔记——JSTL标签
- 错误 4 error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- JavaWeb笔记——JSTL标签
- 使用OLEDB可以对excel文件进行读取1
- S3C2440 定时器
- Codevs1169 传纸条
- Cortex-M3处理器的舞台
- 饥饿的牛 解题报告
- ajax如何实现页面局部跳转与结果返回
- Logback.xml模板
- JavaWeb笔记——Jsp的指令、内置对象和动作标签
- JavaWeb笔记——Jsp的指令、内置对象和动作标签
- inittab脚本启动解析
- <c:if test="value ne, eq, lt, gt,...."> 用法
- 读取excel数据并保存为xml
- STM32官方固件库简介