OpenGL(二)图形绘制之点线绘制
来源:互联网 发布:三星s5 g900p解网络锁 编辑:程序博客网 时间:2024/04/30 18:24
本次主要简单学习OpenGL中相关图形绘制的一些API。
以下程序主要是点的大小、直线线性和线宽绘制的示例。
#include<windows.h>#include<gl/gl.h>#include<gl/glu.h>#include<gl/glut.h>#include<stdio.h>//窗口的大小GLsizei windowWidth;GLsizei windowHeight;void ReaderScene(void ){//用当前背景色填充窗口glClear(GL_COLOR_BUFFER_BIT);//设置当前的绘图RGB颜色glColor3f(0.0f,0.0f,0.0f);// 控制画点大小,一般是如下代码结构GLfloat sizes[2]; //保存绘制点的尺寸范围GLfloat step; //保存绘制点尺寸的步长GLfloat curSize; //当前绘制的点的大小glGetFloatv(GL_POINT_SIZE_RANGE, sizes);glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);//sizes保存了glLineWidth的最小有效值和最大有效值//step保存线宽允许的最小增量//granularity 尺寸间隔意思//printf("curSize=%lf\n sizes1= %lf\tsizes2=%lf\n", curSize,sizes[0],sizes[1]);//输出结果是 1.000000 1.000000 63.37500curSize = sizes[0];//绘制不同大小的点for (int i = 0; i < 5; ++i){glPointSize(curSize);glBegin(GL_POINTS); glVertex3f(25.0+i*8,200.0f,0.0f);glEnd();curSize += step;} //绘制一条宽度为5的直线 (25.160)->(225,160)glLineWidth(5);glBegin(GL_LINES);glVertex3f(25.0,160.0f,0.0f);glVertex3f(225.0f,160.0f,0.0f);glEnd();//绘制一条虚线glEnable(GL_LINE_STIPPLE);//驱动“点画”绘制glLineStipple(1,0x00FF);//设置"点画"划线模式glBegin(GL_LINES);glVertex3f(25.0f,120.0f,0.0f);glVertex3f(225.0f,120.0f,0.0f);glEnd();//理解glLinestipple//glLineStipple — specify the line stipple pattern//void glLineStipple(GLint factor,//GLushort pattern);//绘制一条宽度为3的点划线glLineWidth(3);glLineStipple(1,0x00FF);glBegin(GL_LINES); glVertex3f(25.0f,80.0f,0.0f);glVertex3f(100.0f,80.0f,0.0f);glEnd();//增加重复因子绘制的点划线glLineStipple(2, 0x00FF);glBegin(GL_LINES);glVertex3f(25.0f, 40.0f, 0.0f);glVertex3f(100.0f, 40.0f, 0.0f);glEnd();//关闭“点画”模式glDisable(GL_LINE_STIPPLE);//刷新OpenGL命令队列glFlush();}void ChangeSize(GLsizei w,GLsizei h){if (h == 0)h = 1;glViewport(0,0,w,h);//重置坐标系统glMatrixMode(GL_PROJECTION);glLoadIdentity();//建立修剪空间的范围if (w <= h){windowWidth = 250.0f;windowHeight = 250.0f*h / w;}else{windowWidth = 250.0f*h / w;windowHeight = 250.0f;}glOrtho(0.0f,windowWidth,0.0f,windowHeight,1.0f,-1.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void SetupRC(){//使用背景为蓝色glClearColor(0.0f, 1.0f, 0.0f, 1.0f);}void main(void ){//初始化显示的模式glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);//创建一个窗口glutCreateWindow("fuoifas");glutDisplayFunc(ReaderScene);glutReshapeFunc(ChangeSize);SetupRC();//启动主GLUT事件处理循环glutMainLoop();}
主要学习点:
(1)理解viod glLineStipple(glint factor,GLshort pattern);
OpenGL中设置直线的当前点画模式。pattern参数是由1或0组成的16位序列,它们根据需要进行重复,对一条特定的直线进行点画处理。从这个模式的低位开始,一个像素一个像素的进行处理。如果模式中对应的位是1,就绘制这个像素,否则就不绘制。模式可以使用factor参数(表示重复因子)进行扩展,它与1和0的连续子序列相乘。因此,如果模式中出现了3个1,并且factor是2,那么它们就扩展为6个连续的1。必须以GL_LINE_STIPPLE为参数调用glEnable()才能启用直线点画功能。为了禁用直线点画功能,可以向glDisable()函数传递同一个参数
(2)void glPointSize(GLfloat size); 使用这个函数设置一个点像素大小
(3) void glLineWidth(GLfloat width) ; 使用这个函数指定线宽
1 0
- OpenGL(二)图形绘制之点线绘制
- OpenGL(二)图形绘制之平面多面体的绘制
- OpenGL(二)图形绘制之多边形面的绘制
- 计算机图形学和OpenGL(二)坐标系和绘制点线函数
- opengl 绘制简单图形
- OpenGL绘制简单图形
- OpenGL简单图形绘制
- OpenGL---绘制简单图形
- OPENGL基本图形绘制
- OpenGL 绘制二维图形
- OpenGL--绘制基础图形
- iOS OpenGL ES 研究二:OpenGL ES绘制图形精华
- Opengl绘制花托(二)
- OpenGL绘制图形以及绘制动画(一)
- 学习OpenGL(三)绘制螺旋状图形
- 学习OpenGL(四)绘制直线图形
- OpenGL学习(2)基本图形绘制
- openGL ES 图形绘制(详解)
- Android绘图机制及处理技巧
- 事件处理机制之Gestures(手势)
- 内存溢出和内存泄漏的区别
- springMVC环境搭建
- Android中使用注解打造自己的IOC框架
- OpenGL(二)图形绘制之点线绘制
- 字节流、字符串、16进制字符串转换__Java(转)
- 丑数
- hdu 1839 Delay Constrained Maximum Capacity Path【二分+SPFA】
- 基于Dubbo的分布式系统架构-持续集成原理介绍
- Java软件工程师面试考纲
- bootstrap布局和标签
- 分页-【存储过程通用的】 【SqlServer分页】
- 计步器转载