老样子,有问题请参照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);//进行混合