您的位置:首页 > 运维架构

OpenGL关于glEnable(GL_LINE_STIPPLE) glLineStipple() glLineWidth() glDisable()的实例

2015-07-30 10:38 369 查看
#include <GL/glut.h>

#include <stdlib.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);

/* GL_SMOOTH采用的顶点颜色渐变颜色着色

* GLFLAT只用定点颜色着色*/

}

void display(void)

{

int i;

glClear(GL_COLOR_BUFFER_BIT);

/* select white for all lines */

glColor3f(1.0, 1.0, 1.0);

/* in 1st row, 3 lines, each with a different stipple */

glEnable(GL_LINE_STIPPLE);
/*执行后,画虚线*/

glLineStipple(1, 0x0101); /* 此时模式为Ox3F07(二进制形式为0000000100000001),它所画出来的直线是这样的:

* 先连续绘制1个像素,然后连续7个像素留空,再连续绘制1个像素,最后7个像素留空

* (注意,首先是从低位开始的)。 */

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);

/* in 2nd row, 3 wide lines, each with different stipple */

glLineWidth(5.0);
/* 像素的宽度 */

glLineStipple(1, 0x0101); /* dotted */

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);

/* in 3rd row, 6 lines, with dash/dot/dash stipple */

/* as part of a single connected line strip */

glLineStipple(1, 0x1C47); /* dash/dot/dash */

glBegin(GL_LINE_STRIP);

for (i = 0; i < 7; i++)

glVertex2f(50.0 + ((GLfloat)i * 50.0), 75.0);

glEnd();

/* in 4th row, 6 independent lines with same stipple */

for (i = 0; i < 6; i++) {

drawOneLine(50.0 + ((GLfloat)i * 50.0), 50.0,

50.0 + ((GLfloat)(i + 1) * 50.0), 50.0);

}

/* in 5th row, 1 line, with dash/dot/dash stipple */

/* and a stipple repeat factor of 5 */

glLineStipple(5, 0x1C47); /* dash/dot/dash */

drawOneLine(50.0, 25.0, 350.0, 25.0);

glDisable(GL_LINE_STIPPLE);
/*与glEnable参数一致*/

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);

}

void keyboard(unsigned char key, int x, int y)

{

switch (key) {

case 27:

exit(0);

break;

}

}

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);

glutKeyboardFunc(keyboard);

glutMainLoop();

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: