`

Android OpenGL ES 开发教程(25):OpenGL光照模型

 
阅读更多

前面绘制球体时Android OpenGL ES 开发教程(22):绘制一个球体 ,为了能看出3D效果,给场景中添加光源。如果没有光照,绘出的球看上去和一个二维平面上圆没什么差别,如下图,左边为有光照效果的球体,右边为同一个球体但没有设置光源,看上去就没有立体效果,因此OpenGL 光照效果对显示3D效果非常明显。

在OpenGL 光照模型中光源和光照效果可以细分为红,绿,蓝三个部分,光源由红,绿,蓝强度来定义,而物体表面材料由其反射红,绿,蓝的程度和方向来定义。OpenGL 光照模型使用的计算公式是对于现实世界光照的一个近似但效果非常好并适合快速计算。

OpenGL 光照模型中定义的光源可以分别控制,打开或关闭,OpenGL ES支持最多八个光源。

OpenGL 光照模型中最终的光照效果可以分为四个组成部分:Emitted(光源), ambient(环境光),diffuse(漫射光)和specular(镜面反射光),最终结果由这四种光叠加而成。

Emitted : 一般只发光物体或者光源,这种光不受其它光源的影响。

ambient: 指光线经过多次反射后已经无法得知其方向(可以看作来自所有方向),可以成为环境光,该光源如果射到某个平面,其反射方向为所有方向。Ambient 不依赖于光源的方向。

diffuse:当一束平行的入射光线射到粗糙的表面时,因面上凹凸不平,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射,这种反射称之为“漫反射”或“漫射”。这个反射的光则称为漫射光。漫射光射到某个平面时,其反射方向也为所有方向。diffuse 只依赖于光源的方向和法线的方向。

specular : 一般指物体被光源直射的高亮区域,也可以成为镜面反射区,如金属。specular依赖于光源的方向,法线的方向和视角的方向。

尽管光源可能只发送某一频率的光线,但ambient,diffuse和specular可能不同。比如使用白光照射一堵红墙,散射的光线可能为红色。OpenGL允许为光源分别设置红,绿,蓝三个元素的值。

最终决定所看到物体的颜色除了光源的颜色和方向外,还取决于物体本身的颜色,比如红色的光照在红色的物体和蓝色的物体,最终看到的物体一个还是红色,一个为黑色。OpenGL 中对物体材料(Material)的颜色是通过其反射红,绿,蓝的比例来定义的。 和光源一样,物体的颜色也可以有不同的ambient,diffuse和specular,表现为反射这些光的比例。ambient,diffuse反射通常为同样的颜色,而specular常常表现为白色或灰色光,如使用白光照射一个红色的球,球的大部分区域显示为红色,而高亮区域为白色。

分享到:
评论

相关推荐

    OpenGL ES应用开发实践指南 Android卷

    由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGLES开发的方法和技巧。  《OpenGL ES应用开发实践...

    Android OpenGL ES 简明开发教程

    ### Android OpenGL ES 简明开发教程知识点梳理 #### 一、OpenGL ES 概述 - **OpenGL ES 定义**:OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 的子集,专门为嵌入式系统(如手机、PDA 和游戏主机等)设计...

    Android OpenGL ES 2.0学习书籍.rar

    最后,了解如何与硬件加速的OpenGLES API交互,以及熟悉GLSL语言(OpenGL Shading Language),是成为OpenGL ES 2.0专家的必经之路。通过编写高效、可读性强的着色器代码,可以创造出各种复杂的视觉效果,实现令人...

    OpenGL ES应用开发实践指南(Android卷).pdf

    由资深Android开发专家根据OpenGLES2.0版本撰写,不仅系统地讲解了OpenGLES的核心概念、技术,以及Android的图形机制,还通过大量案例讲解了在Android上进行OpenGLES开发的方法和技巧。  《OpenGL ES应用开发实践...

    OpenGL ES 2 for Android A Quick-Start Guide

    - **最新技术**:本书紧跟Android开发趋势,确保读者所学的技术是当前最前沿的。 #### 五、总结 《OpenGL ES 2 for Android: A Quick-Start Guide》不仅是一本优秀的学习资料,也是一本宝贵的参考手册。无论是对于...

    Android OpenGL ES 简明开发教程相关源码材质渲染

    这个“Android OpenGL ES 简明开发教程相关源码材质渲染”旨在教授如何在Android应用中利用OpenGL ES进行材质渲染,从而创建出丰富的视觉效果。 材质渲染是OpenGL ES中的关键概念,它涉及到物体表面的外观属性,如...

    OpenGLES 2.0 for android 开发教程 从入门到精通和Demo

    在Android系统中,OpenGLES 2.0是用于图形渲染的重要框架,支持3D图形和复杂的视觉效果。本教程旨在帮助开发者从零基础开始掌握OpenGLES 2.0,并通过实例Demo加深理解。 入门篇: 1. **环境配置**:首先,你需要...

    [Android.3D游戏开发技术宝典:OpenGL.ES.2.0].吴亚峰.扫描版[ED2000.COM].rar

    总而言之,《Android.3D游戏开发技术宝典:OpenGL.ES.2.0》是一本全面而深入的教程,适合对3D游戏开发感兴趣的初学者,以及寻求提升自己Android游戏开发技能的有经验开发者。通过阅读这本书并实践其中的代码示例,...

    Android Opengles 开发入门技术文档

    本文档将引导开发者逐步了解并掌握Android上的OpenGL ES 开发。 1. **OpenGL ES 功能** OpenGL ES 提供了一套标准接口,允许开发者创建复杂的3D和2D图形。它支持顶点数组、纹理映射、颜色操作、光照效果、多边形...

    opengles加载3d模型(纹理+光照)

    opengles加载3d模型(纹理+光照)

    Android 3D游戏开发技术宝典:OpenGL ES 2.0

    ### Android 3D游戏开发技术宝典:OpenGL ES 2.0 #### 一、概述 随着移动设备性能的不断提升,3D游戏在Android平台上变得越来越流行。OpenGL ES(Open Graphics Library for Embedded Systems)作为一套专门针对...

    Android OpenGL绘制STL 3D模型

    本文将深入探讨如何使用OpenGL在Android上绘制STL(立体光刻)3D模型,特别关注创建一个3D指南针效果。STL是一种广泛用于3D打印和计算机辅助设计(CAD)的文件格式,它包含了物体表面的三角形面片信息。 首先,我们...

    android opengl 开发的小游戏

    - **SurfaceView**:Android提供的特殊视图,允许在后台线程中进行OpenGL渲染,避免阻塞UI主线程。 - **生命周期管理**:在Android应用的生命周期中,需要妥善处理OpenGL资源的创建、销毁和恢复。 3. **游戏框架...

    Android OpenGL 教程(6-10)

    在Android上,OpenGL ES(Embedded Systems的缩写)被广泛用于游戏开发、复杂用户界面和视觉效果。这个系列的教程,"Android OpenGL 教程(6-10)",是从经典的Nehe OpenGL教程移植到Android平台的,旨在帮助开发者...

    android opengl es 经典实例

    这个"android opengl es 经典实例"着重展示了如何利用OpenGL ES实现人物走动的效果。 首先,我们来看一下实现人物走动的关键技术点: 1. **顶点坐标和模型矩阵**:人物模型是由多个顶点组成的,这些顶点通过索引或...

    android opengl es 粒子,火焰

    OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android平台上,它用于创建复杂的2D和3D图形效果。OpenGL ES(Embedded Systems)是OpenGL的轻量级版本,专为资源有限的移动设备设计。在Android系统中,...

    android开发之OpenGL ES教程

    本教程将聚焦于Android上的OpenGL ES 3D游戏开发,介绍如何设置OpenGL ES视图,这是任何图形应用的基础。 首先,我们要了解的是`GLSurfaceView`。在Android 1.5版本中引入的`GLSurfaceView`是一个API类,它为编写...

    Android OpenGL 教程(1-5)

    在Android平台上,OpenGL ES(Embedded Systems的缩写)被广泛应用于游戏开发、3D渲染和其他图形密集型应用。Android OpenGL教程是开发者学习如何在Android设备上使用OpenGL ES进行图形编程的重要资源。 本教程系列...

    android opengles2.0 jni

    在Android应用开发中,结合OpenGL ES 2.0和JNI,开发者可以实现更复杂、性能更强的图形特效,例如“水波纹效果”。 在Android中,OpenGL ES 2.0相比于1.0版本引入了着色器语言(GLSL),这使得开发者可以直接编写...

Global site tag (gtag.js) - Google Analytics