Android OpenGL ES学习笔记之材质概念和添加光照

一、光照概念

观察一个真实的3D物体,在不同的部位必然有不同的光照效果,有的地方暗一点,有的地方亮一点。而这种视觉差异是由光源和材质(物体的材料)共同决定的。光源强度由红、绿、蓝三色光强度共同决定,最终的光照效果由4部分组成:

 - Emitted(光源)

 - diffuse(漫反射光)

 - specular(镜面反射光)

 - ambient(环境光) 

这里附上一张网上的图:

这里写图片描述


Emitted(光源)

物体本身所发射出的光,有的物体不发射光,那就没有这个属性


diffuse(漫反射光)

漫反射和镜面反射大家应该都知道,初中物理有讲过。
漫反射,是投射在粗糙表面上的光向各个方向反射的现象。当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。

如下图:

这里写图片描述


specular(镜面反射光)

镜面反射是指若反射面比较光滑,当平行入射的光线射到这个反射面时,仍会平行地向一个方向反射出来,这种反射就属于镜面反射


ambient(环境光)

在环境中进行了多次散射的光,而最终无法分辨其方向的光。

二、材质概念

物体的材质属性通过反射不同方向的环境光,漫反射光,镜面光的RGB颜色来表示的。分为四种:

 - 泛射材质

 - 漫反射材质

 - 镜面反射材质

 - 发射材质

三、光照模型

添加光照效果也就是使用OpenGL的光照模型需要以下步骤

  1. 打开光源
  2. 设置光源的种类、位置和方向(对于平行光源)
  3. 设置顶点的法向量
  4. 设置材质

1、打开光源

首先需要打开光源的总开关

    //打开光源总开关
    gl.glEnable(GL10.GL_LIGHTING);

在OpenGL ES中,仅仅支持有限数量的光源。使用GL_LIGHT0表示第0号光源,GL_LIGHT1表示第1号光源,依次类推,OpenGL至少会支持8个光源 。GL_LIGHT0到GL_LIGHT7。

打开0号光源

    //打开0号光源
    gl.glEnable(GL10.GL_LIGHT0);

2、设置光源的种类、位置和方向(对于平行光源)

设置光源的方法如下

 - glLightfv(int light, int pname, FloatBuffer params)

 - glLightfv(int light, int pname, float[] params, int offset)

各个参数含义如下

 - light—————— 光源的序号

 - pname—————— 光源属性名称 

 - params—————— 光源属性的值(float 数组或是Buffer类型)

 - offset——————  偏移量

params有以下几种

 - GL_SPOT_EXPONENT————
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值