OpenGL几何图元和缓冲区(六)

来源:互联网 发布:p2p监控软件客户端 编辑:程序博客网 时间:2024/04/28 14:52

前一阵子项目太忙了,Arabic的Bidi问题搞的头大。这阵子闲一点了,继续OpenGL的学习吧。

今天学习一下OpenGL中点划线的绘制。

要想用OpengL画点划线必须先开启点划线功能。函数如下:

glEnable(GL_LINE_STIPPLE)//开启点划线支持
glDisable(GL_LINE_STIPPLE)//关闭点划线功能

点划线功能打开之后就可以画点划线了,函数如下:

void glLineStipple(GLint factor,GLushort pattern)

接下来解释一下参数的意思。第二个参数pattern指的是点划线的显示模式--即哪几位像素点显示(1显示),哪几位不显示(0不显示)。第一个参数参数factor是显示或不显示像素点的倍数。

注:此处的绘制模式是从最低位开始绘制。

好了,废话不多说了,直接上代码,点划线:

#include <GL/glut.h>void RenderScene(void){GLfloat y;GLint factor = 1;GLushort pattern = 0x5555;glClear(GL_COLOR_BUFFER_BIT); //清除颜色glEnable(GL_LINE_STIPPLE); //启用点划线模式for(y = -90.0f; y<90.0f; y+=20.0f) {glLineStipple(factor,pattern);glBegin(GL_LINES);     //划线    glVertex2f(-80.0f,y);glVertex2f(80.0f,y);glEnd();factor++;            //改变partten宽度}glFlush();                    //刷新}//当窗口大小变化时调用void ChangeSize(GLsizei w,GLsizei h){GLfloat aspectRatio;if(0 == h)h = 1;//设置视口大小glViewport(0,0,w,h);//重置坐标系glMatrixMode(GL_PROJECTION);glLoadIdentity();//建立裁剪区aspectRatio = (GLfloat)w / (GLfloat)h;if(w <= h)glOrtho(-100.0,100.0,-100.0/aspectRatio,100/aspectRatio,1.0,-1.0);elseglOrtho(-100.0*aspectRatio,100.0*aspectRatio,-100.0,100.0,1.0,-1.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}//设置渲染void SetupRC(void)        {glClearColor(0.0f,0.0f,1.0f,1.0f);}int main(int argc,char* argv[]){glutInit(&argc,argv);glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);glutCreateWindow("OpenGL Sample8");glutDisplayFunc(RenderScene);glutReshapeFunc(ChangeSize);SetupRC();glutMainLoop();return 0;}

代码结束。

以下是程序运行截图:

 

睡觉未完待续......