NeHe_Lesson7 纹理过滤,灯光

纹理过滤有三种方式:

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 3f 是教程中新出现的函数。 法线(normal) 是垂直于多边形表面的向量, 当使用光照的时候必须要指定法线向量, 它用于告诉OpenGL多边形的朝向。OpenGL通过法线向量确定在顶点处物体接收了多少光。

// Front Face

glNormal 3f ( 0.0f , 0.0f , 1.0f );

glTexCoord 2f ( 0.0f , 0.0f ); glVertex 3f ( -1.0f , -1.0f ,  1.0f );

glTexCoord 2f ( 1.0f , 0.0f ); glVertex 3f ( 1.0f , -1.0f ,  1.0f );

glTexCoord 2f ( 1.0f , 1.0f ); glVertex 3f ( 1.0f ,  1.0f ,  1.0f );

glTexCoord 2f ( 0.0f , 1.0f ); glVertex 3f ( -1.0f ,  1.0f ,  1.0f );

你可能感兴趣的:(less)