今天看书学习了opengl状态机,以及opengl的属性压栈。
opengl把各类有属性的变量称为管线的状态。状态机是一个抽象模型,是一组状态变量的集合。当一个状态变量被设置后,他会一直保持直到下一次改变。
例如,
opengl提供了将属性压栈的操作。下面的函数将状态值或一组范围的相关值压入属性堆栈中void glPushAttrib(GLbitfield mask);下面函数提取相应的值这两个函数的参数是个位段,也就是一个位掩码,使用|符号或操作来表示多个状态。如:glPushAttrib(GL_TEXTURE_BIT|GL_LIGHTING_BIT);
opegl画点画线
首先用glEnable(GL_LINE_STIPPLE);
然后,可以用glLineStipple(GLint fator,GLushort pattern)创建这种模式,以便进行画线。
其中参数pattern代表一个16位的值,每个位代表此段直线是否处于打开状态。默认情况下一个位对应一个像素,而fator作为乘法因子增加模式的宽度。例如将当fator 是3的时候,每一个位代表的是三个像素。特别注意的是,模式是从第0位(最低有效位)开始,用于指定直线。
其中,从最低有效位开始,是因为opengl向左移一个位是更快速的。