第2课:OpenGL几何图原——点
来源:互联网 发布:mac photoshop cc 破解 编辑:程序博客网 时间:2024/05/18 23:54
点的大小默认为1个像素,但也可以改变之。改变的命令为glPointSize,其函数原型如下:
void glPointSize(GLfloat size);
size必须大于0.0f,默认值为1.0f,单位为“像素”。
看一个OpenGL程序:
#include <GL/glut.h> //glut.h中含有gl.h和glu.h文件
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(5.0f);
glBegin(GL_POINTS);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("画点(像素)");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;
}
编译运行后,效果图如下:
假如我们把glPointSize(5.0f);改成glPointSize(50.0f);效果图如下:
若再改成glPointSize(200.0f); ,则效果很明显了:
则此时点已经成为带状了因此对于具体的OpenGL实现,点的大小都有个限度的,如果设置的size超过最大值,则设置可能会有问题。
下面针对上面的程序作一些必要的解释:
(这种以glut开头的函数都是GLUT工具包所提供的函数,下面对用到的几个函数进行介绍。)
1、void myDisplay(void)是自己编写的函数,很像C语言中的子函数,在其它子函数或main()函数中可以随时调用。
2、glClear()函数的原型为:void glClear(GLbitfield mask);指的是用当前的清除颜色值清除指定缓存,mask为所清除的缓存,其值可以为:
mask变量 清除的缓存
GL_COLOR_BUFFER_BIT 颜色缓存
GL_DEPTH_BUFFER_BIT 深度缓存
GL_ACCUM_BUFFER_BIT 累加缓存
GL_STENCIL_BUFFER_BIT 模板缓存
通常void glClearColor(GLfloat r,GLfloat g,GLfloat b,GLfloat a);用于设置指定窗口的清除颜色,然后void glClear(GLbitfield mask);清除为刚才设置的清除颜色。r,g,b用于设置RGB颜色模型的三个分量,a为透明度设置。
3、void glPointSize(GLfloat size);size必须大于0.0f,默认值为1.0f,单位为“像素”。
4、OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略)。并由glBegin来指明如何使用这些点。
在glBegin和glEnd之间,只有以下函数是有效的,其它函数全部会被忽略。
glVertex*
glColor*
glIndex*
glSecondaryColor*
glNormal*
glMaterial*
glFogCood*
glTexCood*
glMultiTexCood*
glEdgeFlag*
glArrayElement*
glEvalCoord*
glEvalPoint*
glCallList
glCallLists
其中*表示所有可能的命令格式,比如:glVertex3f(),glVertex2d()等等。
glBegin支持的方式除了GL_POINTS以外,还有如下一些:
glBegin()参数值 解释
CL_POINTS 一系列独立的点
CL_LINES 每两点相连成为险段
CL_POLYGON 简单、凸多边形的边界
CL_TRIANGLES 三点相连为一个三角形
CL_QUADS 四点相连为一个四边形
CL_LINE_STRIP 顶点相连为一折线
CL_LINE_LOOP 顶点相连为一折线,并将最后一点与第一点相连
CL_TRIANGLE_STRIP 相连的三角形带
CL_TRIANGLE_FAN 相连的三角形扇形
CL_QUAD_STRIP 相连的四边形带
具体的效果图如下(来自网上):
5、glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
表示连续画两个点(0.0, 0.0),(0.5, 0.5),窗口正中央为坐标原点(0.0,0.0)。
OpenGL提供了一系列以glVertex开头的函数,后面跟一个数字和1~2个字母。例如:
glVertex2d
glVertex2f
glVertex3f
glVertex3fv
等等。
数字表示参数的个数,字母表示参数的类型,
s表示16位整数(OpenGL中将这个类型定义为GLshort),
i表示32位整数(OpenGL中将这个类型定义为GLint和GLsizei),
f表示32位浮点数(OpenGL中将这个类型定义为GLfloat和GLclampf),
d表示64位浮点数(OpenGL中将这个类型定义为GLdouble和GLclampd)。
v表示传递的几个参数将使用指针的方式。
这些函数除了参数的类型和个数不同以外,功能是相同的。例如,以下五个代码段的功能是等效的:
(1)glVertex2i(1, 3);
(2)glVertex2f(1.0f, 3.0f);
(3)glVertex3f(1.0f, 3.0f, 0.0f);
(4)glVertex4f(1.0f, 3.0f, 0.0f, 1.0f);
(5)GLfloat VertexArr3[] = {1.0f, 3.0f, 0.0f};
glVertex3fv(VertexArr3);
常用glVertex*来表示这一系列函数。
6、glFlush,保证前面的OpenGL命令立即执行(而不是让它们在缓冲区中等待)。
7、int main(int argc, char *argv[]),这个是带命令行参数的main函数,其实C语言中就接触过,入口主函数。
注意:
main函数中的各语句,除了最后的return之外,其余全部以glut开头。
8、glutInit(&argc, argv); 对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次。其格式比较死板,一般照抄这句glutInit(&argc, argv)就可以了。
9、glutInitDisplayMode,设置显示方式,其中GLUT_RGB表示使用RGB颜色,与之对应的还有GLUT_INDEX(表示使用索引颜色)。GLUT_SINGLE表示使用单缓冲,与之对应的还有GLUT_DOUBLE(使用双缓冲)。
10、void glutInitWindowPosition(),设置窗口在屏幕中的位置,参数即为坐标点的形式。
11、void glutInitWindowSize(),设置窗口的大小。
12、void glutCreateWindow(""),根据前面设置的信息创建窗口。参数字符串将被作为窗口的标题。
13、void glutDisplayFunc(),设置一个函数,当需要进行画图时,这个函数就会被调用。
14、void glutMainLoop(),进行一个消息循环,窗口被创建后,并不立即显示到屏幕上。需要调用glutMainLoop才能看到窗口。
- 第2课:OpenGL几何图原——点
- 第3课:OpenGL几何图原——线
- 第4课:OpenGL几何图原——多边形
- OpenGL学习——二维几何变换
- 计算几何——多边形 计算几何点类
- ArcGIS中的几何对象——点
- 计算几何模板——点类
- OpenGL小探2--几何图元,3D初步
- OpenGL图形变换——几何变换(世界变换)
- OpenGL 几何着色器 传入点,绘制三角形
- 几何图元之一:点
- OpenGL几何图元和缓冲区(一)
- OpenGL几何图元和缓冲区(二)
- OpenGL几何图元和缓冲区(三)
- OpenGL几何图元和缓冲区(四)
- OpenGL几何图元和缓冲区(五)
- OpenGL几何图元和缓冲区(六)
- opengl 函数库--绘制几何图元
- 图形化编程常用函数功能介绍
- 认识自己
- Linux常用命令
- 一位武汉大学学长写给同学们的信(转)
- 随笔
- 第2课:OpenGL几何图原——点
- MFC/WIWIndows常用API--3
- 正则表达式
- 常用正则表达式
- Java: RMI调用实例2
- 多核编程的几个难题及其应对策略(难题一)
- 这支烟灭了以后
- 批量装载XML文件到SQL SERVER 2K
- 第3课:OpenGL几何图原——线