OpenGL ES 光照模型之——环境光照(RenderMonkey测试)
概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/)
本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试。
主要包括如下内容:
使用RenderMonkey创建一个简单的工程
RenderMoney创建一个OpenGL ES渲染工程很简单,大家只需根据下面图片步骤即可创建一个纯色的球体模型渲染工程。
(OpenGL ES模型渲染工程创建)
环境关照模型分析及相应输入数据创建
环境光被建模为没有起点,也没有方向的类型光,其最大特点为它对场景中所有物体有同等的效果。模型公式如下:
我们在下面的照片步骤中,我们在RenderMonkey中创建了该光照模型输入数据,以及为球体创建了一张贴图,其中gAnbientColor为环境光照颜色输入,gAmbientStrength为环境光照强度输入,baseMap为文理数据对象,我们为球体添加一张地球表面的图片。
(环境光照模型数据输入及球体贴图文理创建)
Shader代码编写
一、Vertex Shader
我们为环境光照模型示例编写的顶点shader代码如下。
其中:
matViewProjection:为RenderMonkey预设的投影矩阵;
rm_Vertex:为模型定顶点数据输入;
rm_TexCoord0:为模型文理坐标输入;
rm_TexCoord:为我们向Fragment Shader中输出的文理坐标数据;
//环境光照模型vertex shader示例代码 1.0 http://www.cnblogs.com/feng-sc/
uniform mat4 matViewProjection;
attribute vec4 rm_Vertex;
attribute vec2 rm_TexCoord0;
varying vec2 rm_Texcoord; void main( void )
{
gl_Position = matViewProjection * rm_Vertex;
rm_Texcoord = rm_TexCoord0.xy;
}
二、Fragment Shader
我们为环境光照模型示例编写的fragment shader代码如下。
其中:
baseMap:为模型文理贴图数据输入;
gAnbientColor:环境关照颜色输入;
gAmbientStrength:环境光照强度输入;
rm_Texcoord:从vertex shader中输出的经过插值处理的文理坐标数据;
//环境光照模型fragment shader示例代码 1.0 http://www.cnblogs.com/feng-sc/
#ifdef GL_FRAGMENT_PRECISION_HIGH
// Default precision
precision highp float;
#else
precision mediump float;
#endif uniform sampler2D baseMap;
uniform vec4 gAnbientColor;
uniform float gAmbientStrength;
varying vec2 rm_Texcoord; void main( void )
{
vec4 color = texture2D(baseMap,rm_Texcoord);
gl_FragColor = color * gAnbientColor * gAmbientStrength; }
最终,经过代码编译后,我们再RenderMonkey的渲染场景中绘制出了一个地球模型对象,如下图所示:
( Shader代码编写)
效果展示
下图中,我们展示了通过调整光照输入强度以及光照颜色,测试环境关照模型的实际显示效果:
(效果展示)
OpenGL ES 光照模型之——环境光照(RenderMonkey测试)的更多相关文章
- OpenGL ES 光照模型之——漫反射光(RenderMonkey测试,地球日出效果)
概述及目录(版权所有,请勿转载 http://www.cnblogs.com/feng-sc) 本文在上一篇(OpenGL ES 光照模型之——环境光照(RenderMonkey测试))环境光基础上, ...
- OpenGL ES for Android 环境搭建
在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...
- Android 中建立一个OpenGL ES的开发环境
转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...
- Android OpenGL ES 开发(二): OpenGL ES 环境搭建
零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceV ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- OpenGL ES 入门
写在前面 记录一下 OpenGL ES Android 开发的入门教程.逻辑性可能不那么强,想到哪写到哪.也可能自己的一些理解有误. 参考资料: LearnOpenGL CN Android官方文档 ...
- Opengl ES之VBO和VAO
前言 本文主要介绍了什么是VBO/VAO,为什么需要使用VBO/VAO以及如何使用VBO和VAO. VBO 什么是VBO VBO(vertex Buffer Object):顶点缓冲对象.是在显卡存储 ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
- Opengl ES之四边形绘制
四边形的绘制在Opengl ES是很重要的一项技巧,比如做视频播放器时视频的渲染就需要使用到Opengl ES绘制四边形的相关知识.然而在Opengl ES却没有直接提供 绘制四边形的相关函数,那么如 ...
随机推荐
- 迷你MVVM框架 avalonjs 学习教程12、数据联动
在许多表单应用,我们经常遇到点击一个复选框(或下拉框)会引发旁边的复选框(或下拉框)发生改变,这种联动效果用avalon来做是非常简单的.在avalon里,存在各种绑定回调与$watch回调,完全满足 ...
- MySQL 事务 是对数据进行操作,对结构没有影响,比如创建表、删除表,事务就不起作用
- ndarray
ndarray ndarray-多维数组对象 ndarray数组分两部分 实际数据 描述数据的元数据(数据类型/维度等) ndarray所有元素类型相同,下标从0开始 import numpy as ...
- Retrofit2+Rxjava2 okhttp RxBus 使用记录
学习 博客 http://blog.csdn.net/r17171709/article/details/51149350 @Query 后面跟要添加的字段 @Path 连接url里面{userId} ...
- Zookeeper—学习笔记(一)
1.Zookeeper基本功能 (增 删 改 查:注册,监听) 两点: 1.放数据(少量). 2.监听节点. 注意: Zookeeper中的数据不同于数据库中的数据,没有表,没有记录,没有字段: Z ...
- EasyUI 修改
<script type="text/javascript"> <!-- js --> /*=============================修改对 ...
- Ajax的get方式传值 避免& 与= 号
js代码 例如: var name = $("#name”).value;//为a&b=7 name=encodeURLComponent(name); 可以将a&b=7转化 ...
- Spring中的IoC(控制反转)具体是什么东西
IOC:inverse of Control: 控制反转. 意思是程序中的之间的关系,不用代码控制,而完全是由容器来控制.在运行阶段,容器会根据配置信息直接把他们的关系注入到组件中.同样,这也是 依赖 ...
- Chip Factory(01字典树)
Chip Factory http://acm.hdu.edu.cn/showproblem.php?pid=5536 Time Limit: 18000/9000 MS (Java/Others) ...
- 【校招面试 之 C/C++】第2题 函数模板、类模板、特化、偏特化
1.C++模板 说到C++模板特化与偏特化,就不得不简要的先说说C++中的模板.我们都知道,强类型的程序设计迫使我们为逻辑结构相同而具体数据类型不同的对象编写模式一致的代码,而无法抽取其中的共性,这样 ...