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.定义

GLfloatLightAmbient[]={0.5f,0.5f,0.5f,1.0f};//环境光

GLfloatLightDiffuse[]={1.0f,1.0f,1.0f,1.0f};//漫射光

GLfloatLightPosition[]={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在教程中给出了一条数学公式:(RsAs+Rd(1-As),GsAs+Gd(1-As),BsAs+Bs(1-As),AsAs+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);//进行混合

相关推荐