OpenGL ES学习(5)——光照

本文详细介绍了OpenGL ES 2.0中的光照模型,包括环境光、散射光和镜面光的基本概念和数学模型。通过示例代码展示了顶点着色器和片元着色器的实现,并提供了不同光照效果的Demo源码下载链接。
摘要由CSDN通过智能技术生成

1. 光照基本模型

在OpenGL ES 2.X中采用的光照模型(通道)分3种:环境光散射光镜面光

1.1 环境光

环境光(Ambient)指的是从四面八方照射到物体上,全方位360°都均匀的光。

在这里插入图片描述

数学模型公式:

环境光照射结果 = 材质的反射系数 ∗ 环境光强度 环境光照射结果=材质的反射系数*环境光强度 环境光照射结果=材质的反射系数环境光强度

环境光下顶点着色器和片元着色器完整代码:

vertex.sh

uniform mat4 uMVPMatrix;//总变换矩阵
attribute vec3 aPosition;//顶点位置
varying vec3 vPosition;//传递给片元着色器的的顶点位置
varying vec4 vAmbient;//传递给片元着色器的环境光分量

void main(){
    gl_Position = uMVPMatrix * vec4(aPosition,1);
    vPosition = aPosition;
    vAmbient = vec4(0.15,0.15,0.15,1.0);
}
frag.sh
precision mediump float;
uniform float uR;//球半径
varying vec3 vPosition;//顶点着色器传递过来的
varying vec4 vAmbient;//顶点着色器传递过来的环境光强度
void main(){
  vec3 color;
  float n = 8.0;
  float span = 2.0*uR/n;
  int i = int((vPosition.x + uR)/span);
  int j = int((vPosition.y + uR)/span);
  int k = int((vPosition.z + uR)/span);

  int whichColor = int(mod(float(i+j+k),2.0));
  if(whichColor==1){
      color = vec3(0.678,0.231,0.129);
    }else{
      color = vec3(1.0,1.0,1.0);
    }
    vec4 finalColor = vec4(color,0);
    gl_FragColor = finalColor * vAmbient;
}

【环境光说明】

  • 环境光没有方向性;
  • 环境光的照射效果与光源位置无关(看下面的GIF图);
  • 实际开发中环境光强度一般设置较弱;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值