纹理过滤有三种方式:
1. GL_NEAREST过滤 (与linear 过滤方式相比速度较快效果较差)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
2. GL_LINEAR过滤
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
3. Mipmapping
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR)
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); }
为了解决纹理尺寸必须2的幂这个限制, 可以适当的调整其尺寸。 现在gluBuild2DMipmaps 就可以为我们做这样的事情。我发现创建mipmap 纹理的时候可以使用任意尺寸的图像, OpenGL 会自动的调整其尺寸。
灯光
环境光: 它没有一个固定的方向, 可以照亮场景中的所有物体。
散射光: 它来自于你的光源,那些被散射光照射到的物体的表面将会明亮起来, 而那些不被散射光照射到的地方则会暗淡下来。
glLightfv(GL_LIGHT1, GL_AMBIENT, Color); // Setup The Ambient Light
glLightfv(GL_LIGHT1, GL_DIFFUSE, Color); // Setup The Diffuse Light
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition); // Position The Light
glEnable(GL_LIGHT1); // Enable Light One
我们开启light1。 表示此时light1已经设置好了, 但是, 在我们没有开启GL_LIGHTING 之前, 仍然不会有光照效果出现。
glEnable(GL_LIGHTING);
glNormal
// Front Face
glNormal
glTexCoord
glTexCoord
glTexCoord
glTexCoord