词条 | glLineStipple() |
释义 | 简介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()函数传递同一个参数。 例如: glLineStipple(1, Ox3F07); glEnable(GL_LINE_STIPPLE); 此时模式为Ox3F07(二进制形式为0011111100000111),它所画出来的直线是这样的:先连续绘制3个像素,然后连续5个像素留空,再连续绘制6个像素,最后两个像素留空(注意,首先是从低位开始的)。如果factor是2,那么这个模式便被扩展为:先连续绘制6个像素,然后连续10个像素留空,再连续绘制12个像素,最后4个像素留空。 如果没有启用点画线功能,OpenGL会自动把pattern当做为OxFFFF,把factor当成1。 程序示例#include <windows.h> #include <GL/glu.h> #include <GL/gl.h> #include <GL/glut.h> #include <GL/glaux.h> #define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \\ glVertex2f((x1),(y1)); glVertex2f((x2),(y2)); glEnd(); void init(void) { glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); } void display(void) { int i; glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x0101); //dotted drawOneLine(50.0, 125.0, 150.0, 125.0); glLineStipple(1, 0x00FF); //dashed drawOneLine(150.0, 125.0, 250.0, 125.0); glLineStipple(1, 0x1C47); //dash/dot/dash drawOneLine(250.0, 125.0, 350.0, 125.0); glLineWidth(5.0); glLineStipple(1, 0x0101); drawOneLine(50.0, 100.0, 150.0, 100.0); glLineStipple(1, 0x00FF); //dashed drawOneLine(150.0, 100.0, 250.0, 100.0); glLineStipple(1, 0x1C47); //dash/dot/dash drawOneLine(250.0, 100.0, 350.0, 100.0); glLineWidth(1.0); glLineStipple(1, 0x1C47); glBegin(GL_LINE_STRIP); for (i= 0; i<7 ; i++) glVertex2f(50.0+((GLfloat)i*50.0), 75.0); glEnd(); for (i= 0; i<6 ; i++){ drawOneLine(50.0+((GLfloat)i*50.0), 50.0, 50.0+((GLfloat)(i+1)*50.0), 50.0); } glLineStipple(5, 0x1C47); drawOneLine(50.0, 25.0, 350.0, 25.0); glDisable(GL_LINE_STIPPLE); glFlush(); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei)w, (GLsizei)h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0, (GLdouble) w, 0.0, (GLdouble) h); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); glutInitWindowSize(400, 150); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。