请输入您要查询的百科知识:

 

词条 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/1 17:14:10