`
linshenqi
  • 浏览: 33913 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

OpenGL中纹理过滤,简单光照和混合的使用。

阅读更多
老样子,有问题请参照nehe的opengl教程。

OpenGL中基本纹理过滤方式大致有三种,分别是NEAREST,LINEAR和Mipmapping,纹理质量依次递增。由于代码重复,这里就提一下设置过滤方式。
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_NEAREST);


OpenGL中的光源有环境光和漫射光组成,定义时和设置颜色差不多(RGB+alpha参数)。
1.定义
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };  //环境光
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };  //漫射光
GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f }; //光源位置

2.设置
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);  //设置环境光
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);  //设置漫射光
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); //设置光源位置

3.启用
glEnable(GL_LIGHT1);


混合(颜色混合)是OpenGL中实现特效的常用手段,最常用的就是实现透明效果。关于混合的原理,nehe在教程中给出了一条数学公式:(Rs As + Rd (1 - As), Gs As + Gd (1 - As), Bs As + Bs (1 - As), As As + Ad (1 - As)),其实就是图形的RGB分量*alpha值+纹理的RGB分量*(1-alpha值),具体实现时无需关心原理,只需使用glColor4f()创建图形,设定相应的alpha值(0.0~1.0),再用glBlendFunc()进行混合即可。
glColor4f(1.0f,1.0f,1.0f,0.5f);  //创建图形,alpha值为0.5f,表示半透明
glBlendFunc(GL_SRC_ALPHA,GL_ONE);//进行混合
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics