zoukankan      html  css  js  c++  java
  • NeHe OpenGL教程 07 纹理过滤、应用光照

    纹理过滤:纹理在映射到多边形上并转换成屏幕坐标时,很少使屏幕像素与纹理单元正好一一对应,要么对应一个纹理单元的一小部分(放大),要么对应多个纹理单元(缩小),而控制OpenGL怎样取得纹理值及怎样匀和或插值的,就是纹理过滤方式,分为放大和缩小两方面。

    放大的情况的纹理过滤方式有最近点采样线性采样两种。最近点采样即直接取最近的纹理单元值,这样容易产生锯齿,但它的速度更快;线性采样即取周围2×2的纹理单元取加权平均值,这样通常比较平滑,但是在靠近纹理图像边缘时,采样的2×2纹理可能会包含纹理图像以外的内容(如边框或其他部分的纹理),因此需要注意纹理环绕模式及边框的设置。 即使有MipMap,在放大时也只是用基层的纹理图像。

    缩小的情况的纹理过滤方式,除了单纯的最近点采样和线性采样(只使用基层的纹理图像,即使有MipMap),可以采用的的过滤方式可概括为GL_XXX_MIPMAP_XXX,其中XXX为NEAREST或LINEAR,两个XXX分别代表在一层的多个纹理单元间及在多MipMap层间使用怎样的采样方式,其中GL_NEAREST_MIPMAP_NEAREST表示取最靠近的MipMap层的最靠近的纹理单元,GL_LINEAR_MIPMAP_LINEAR又叫双线性过滤

    线性采样和双线性采样能够有效减少因纹理映射引起的锯齿现象,这种锯齿在画面变化的时候尤为突出。

    使用gluBuild2DMipmaps代替glTexImage2D创建纹理对象,同时可以自动创建相应的MipMap层。

    为了给场景添加光照,使用glLight分别指定光源颜色、光源位置。

  • 相关阅读:
    Pwn-level3
    【mysql】 mysql忘记密码
    【Linux】linux磁盘管理
    【Linux】Linux系统LVM管理及Raid
    【Git】git撤销与回滚
    【linux】Linux系统SELinux简介
    【Linux】Linux中的网络命令
    【Linux】linux中文本操作利器grep,awk,sed
    【Linux】linux正则表达式及通配符
    【Mysql】mysql数据备份
  • 原文地址:https://www.cnblogs.com/indif/p/2025880.html
Copyright © 2011-2022 走看看