转载请保留出处,,,,hushuai1992http://blog.youkuaiyun.com/u013642494/article/category/2675731
额, 这个标题我都不知道该怎么起了, 如果没有标题, 请不要在意这些细节。。。。。
我们看看上次我们画的点、以及线, 我们似乎忘了说如何设置点的大小( 哦, 不对, 我似乎是说了后面来说的。。。。), 现在我们来看看
一 设置点的大小和线的粗细
void glPointSize (GLfloat size);//设置点的大小, 默认为一个像素
void glLineWidth (GLfloat width);//设置线的宽度
注意, 这两个函数都要在glBegin()之前使用, 在glBegin()之后使用无效
而且必须要开启反走样(glEnable(GL_LINE_SMOOTH);)了之后才可以使用小数哦
看看代码:
void display()
{
glClear( GL_COLOR_BUFFER_BIT);
glPointSize( 20.0f);
glBegin( GL_POINTS);
glVertex2f( 0.0f, 0.0f);
glEnd();
glLineWidth( 5.0f);
glBegin( GL_LINES);
glVertex2f( -0.5f, -0.5f);
glVertex2f( 1.0f, -0.5f);
glEnd();
glFinish();
}
二 设置颜色
估计小伙伴们都猜到了吧
void glColor3f (GLfloat red, GLfloat green, GLfloat blue);//设置颜色
void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);//设置颜色, 带透明通道
不过这里的参数不是[0,255], 而是[0,1]。线性映射等浮点值表示的最大值映射到1.0(全强度),和零映射到0.0(零点强度)。
采用f和d做后缀的函数,以1.0表示最大的使用。
采用b做后缀的函数,以127表示最大的使用。
采用ub做后缀的函数,以255表示最大的使用。
采用s做后缀的函数,以32767表示最大的使用。
采用us做后缀的函数,以65535表示最大的使用。
void display()
{
glClear( GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND); // 打开混合
glDisable(GL_DEPTH_TEST); // 关闭深度测试
glBlendFunc(GL_SRC_ALPHA, GL_ONE); // 基于源象素alpha通道值的半透明混合函数
glColor3f( 0.0f, 1.0f, 0.0f);
glPointSize( 20.0f);
glBegin( GL_POINTS);
glVertex2f( 0.0f, 0.0f);
glEnd();
glColor4f( 1.0f, 0.0f, 0.0f, 0.5f);
glLineWidth( 5.0f);
glBegin( GL_LINES);
glVertex2f( -0.5f, -0.5f);
glVertex2f( 0.5f, 0.5f);
glEnd();
glFinish();
}
小伙伴们都注意一下哈, 如果需要使用透明通道, 必须要打开ALPHA混合器,并指定源与目标的混合方式。看这几句代码
glEnable(GL_BLEND); // 打开混合
glDisable(GL_DEPTH_TEST); // 关闭深度测试
glBlendFunc(GL_SRC_ALPHA, GL_ONE); // 基于源象素alpha通道值的半透明混合函数
void glEnable(GLenum cap);//用来开启各项功能
当然, 相对应的肯定就有关闭各项功能glDisable()
我们看看下面的参数
类型
|
值
|
说明
|
GL_ALPHA_TEST
|
4864
|
根据函数glAlphaFunc的条件要求来决定图形透明的层度是否显示。具体参见glAlphaFunc
|
GL_AUTO_NORMAL
|
3456
|
执行后,图形能把光反射到各个方向
|
GL_BLEND
|
3042
|
启用
颜色混合。例如实现半透明效果
|
|