前一阵子项目太忙了,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); else glOrtho(-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; }
代码结束。
以下是程序运行截图:
未完待续......