RenderMonkey 练习 第二天 【opengl 光照模型】

光照模型

3D渲染中, 物体表面的光照计算公式为:

I = 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular);

其中,环境光(ambient)计算公式为:

Iambient = Aintensity * Acolor ;             (Aintensity表示环境光强度,Acolor表示环境光颜色)

漫反射光(diffuse)计算公式为:

Idiffuse = Dintensity*Dcolor*N.L ;                   (Dintensity表示漫反射强度,Dcolor表示漫反射光颜色,N为该点的法向量,L为光源向量)

镜面光照(specular)计算公式为:

Ispecular = Sintensity*Scolor*(R.V)n ;         (Sintensity表示镜面光照强度,Scolor表示镜面光颜色,R为光的反射向量,V为观察者向量)

综上所得:整个光照公式为:

I = Aintensity * Acolor +Dintensity*Dcolor*N.L + Sintensity*Scolor*(R.V)n ;

将一些值合并,并使用白色作为光照颜色,则上述公式可简化为:

I = A + D*N.L + (R.V)n

漫反射光照:

1. 打开RenderMonkey, 右击WorkSpace的Effect WorkSpace结点,选择Add Default Effect->OpenGL->OpenGL;

2. 添加物体位置矩阵:右击Effect节点 选择 Add Variable->Matrix->PreDefined->matWorld

3. 添加光源向量: 右击Effect节点选择Add Variable->float->float4;  修改名称为vecLightDir, 双击设置其值

4. 编写Vertex Shader:

uniform vec4 vecLightDir;
uniform mat4 matWorld;
varying vec3 light;
varying vec3 normal;

void main(void)
{
   gl_Position = ftransform();
   light = normalize(vecLightDir.xyz);
   normal = normalize(vec4(gl_Normal.xyz,1.0) * matWorld).xyz;   
}

5.    编写Pixel Shader:

varying vec4 light;
varying vec3 normal;

void main(void)
{
   vec4 diffuse = vec4(1.0,1.0,1.0,1.0);
   vec4 ambient = vec4(0.3,0.2,0.1,1.0);
   //gl_FragColor = vec4( 0.4, 0.5, 0.9, 1.0 );
   gl_FragColor = ambient + diffuse*clamp(dot(light,normal),0.0,1.0);
}

6. 预览效果

时间: 2024-07-29 12:57:40

RenderMonkey 练习 第二天 【opengl 光照模型】的相关文章

RGBA HSB opengl光照模型

RGBA HSB HSV颜色模型对应于画家的配色的方法.画家用改变色浓和色深的方法来从某种纯色获得不同色调的颜色.其做法是:在一种纯色中加入白色以改变色浓,加入黑色以改变色深,同时加入不同比例的白色,黑色即可得到不同色调的颜色 1. 几个概念 环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——它们并非来自特定的光源,这些光经过了多次散射,已经无法确定其光源位于何处. 散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因

OpenGL ES 光照模型之——环境光照(RenderMonkey测试)

概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/) 本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试. 主要包括如下内容: 1.使用RenderMonkey创建一个简单的工程 2.环境关照模型分析及相应输入数据创建 3.Shader代码编写 4.效果展示 使用RenderMonkey创建一个简单的工程 RenderMoney创建一个OpenGL ES渲染工程很简单,大家只需根据下面图片步骤即可创建一个纯色的球体模型渲染工程. (

OpenGL ES着色语言-光照效果之散射光

OpenGL光照模型,在固定管线中,主要是调用OpenGL函数实现,如果使用着色器,该怎么实现.本文的例子是移植OpenGL 4.0 Shading Language Cookbook中第二章的例子.代码已经移植到Android上. 散射光计算主要涉及到两个向量,第一个是顶点到光源的向量S,以及顶点处的法向量N.光照计算在眼睛坐标中进行.具体见下图所示: 有这两个向量之后,还要考虑顶点处的漫反射系数以及光源强度,最终顶点处的光照强度的结果可以通过下列公式计算: Ld为光源强度,Kd为漫反射系数.

OpenGL学习日记-2014.12.21--光照

o(╯□╰)o深患中度拖延症,也是从开始写这篇笔记到结束居然用了一个月...虽然中间是发生了不少事,不过明明就有无数机会可以完成,就是拖着没写代码,各种借口...面对如此拖延症该如何是好QAQ 正文: 突然觉得这些日记写着写着就没什么意思...只是简单梳理一下书中的内容,没经过很多的思考,可不写心里更虚,怕自己几天就把看的书忘了.对于很多概念,都由于没有好好去写代码验证,而理解流于表面.对于光照这章也是下决心细细琢磨一番(现在才下的决心o(╯□╰)o),毕竟这很重要. 一.光照和颜色密切相关,光

openGL光源概念

1. 光照模型      环境光——经过多次反射而来的光称为环境光,无法确定其最初的方向,但当特定的光源关闭后,它们将消失. 全局环境光——每个光源都能对场景提供环境光.此外,还有一个环境光,它不来自任何特定的光源,称之为全局环境光.这也就是为什么我们不加任何自定义光源,也能看见绘制的物体的原因.散射光——来自同一方向,照射到物体表面后,将沿各个方向均匀反射,因此,无论从哪个方向观察,表面的亮度都相同. 主要通过设置GLfloat light_diffuse[] = { 0.0, 1.0, 0.

OpenGL ES 简单教程

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. OpenGL ES 定义了一个在移动平台上可以支持OpenGL最基本功能的精简标准.以适应如手机.PDA或其他消费者移动终端的显示系统. Khronos Group 定义和管理了OpenGL ES标准. OpenGL 与 OpenGL ES的关系OpenGL ES 是基于桌面版本号OpenGL 的

Chromium硬件加速渲染的OpenGL命令执行过程分析

在Chromium中,由于GPU进程的存在,WebGL端.Render端和Browser端的GPU命令是代理给GPU进程执行的.Chromium将它们要执行的GPU命令进行编码,然后写入到一个命令缓冲区中,最后传递给GPU进程.GPU进程从这个命令缓冲区读出GPU命令之后,就进行解码,然后调用对应的OpenGL函数.本文就详细分析WebGL端.Render端和Browser端执行GPU命令的过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在前面Ch

Android OpenGL ES 开发教程 从入门到精通

From:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程五

[转]Android OpenGL ES 开发教程 从入门到精通

本文转自:http://blog.csdn.net/mapdigit/article/details/7526556 Android OpenGL ES 简明开发教程 Android OpenGL ES 简明开发教程一:概述 Android OpenGL ES 简明开发教程二:构造OpenGL ES View Android OpenGL ES 简明开发教程三:3D绘图基本概念 Android OpenGL ES 简明开发教程四:3D 坐标变换 Android OpenGL ES 简明开发教程五