opengl 直线的线型(各种虚线)
除了直线的宽度可以根据需要进行改变外,直线的线型也可以改变。glLineStipple就可以提供不同于常规的连续线段的中心线、虚线、点划线等等。其函数原型如下
void glLineStipple(
GLint factor,
GLushort pattern
);
其中factor 是比例因子,它表示在线型模式中,每一位的放大倍数。例如,factor为3,那么线型模式中的每一位要重复3次,然后在继续下一位。factor的取值范围是[1, 256],缺省值是1。pattern 是一个16位的整数,它表示线型模式,当某一位为0时,表示不画线,为1时画线,但是处理是从最底位开始的,颜色为当前颜色。缺省值为0xFFFF,即连续线。 例如pattern为0x40FF时,表示的画线如下图10-3所示。
禁用和启用线型模式设置可以使用glEnable(GL_LINE_STIPPLE) 和glDisable(GL_LINE_STIPPLE),当禁用线型模式时,使用glLineStipple设置的直线均按照连续线处理,这也是OpenGL的缺省处理。
下面我们来举例说明常用的几种直线线型的构造和使用。
BOOL bAntialiasing = FALSE; //是否进行反走样处理
BOOL bAntiPress = FALSE; //是否按了F1键
void Line3f(GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat);
int PatternMode = 0; //线型模式
int Pattern[]= //定义了6种线型
{
//点线 1000100010001000, 表示实际画线的点,反序后转换成16进制就是0x1111
//. . . . . . . . . . . . . .
0x1111,
//点划线 1111111111100100
//____ . ____ . _____ . _____. _____
0x27FF,
//中心线 1111111111001100
//_____ _ _____ _ _____ _ _____ _ _____
0x33FF,
//虚线 1111110011111100
//____ ____ ____ ____ ____ ____ ____
0x3F3F,
//双点划线 1111111100100100
// ____ . . ____ . . ____ . . ____ . . ____
0x24FF,
//三点划线 111111110101010
// ____ . . ____ . . ____ . . ____ . . ____
0x55FF
};