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
原创粉丝点击