概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/)

  本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试。

  主要包括如下内容:

  1、使用RenderMonkey创建一个简单的工程

  2、环境关照模型分析及相应输入数据创建

  3、Shader代码编写

  4、效果展示

使用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测试)的更多相关文章

  1. OpenGL ES 光照模型之——漫反射光(RenderMonkey测试,地球日出效果)

    概述及目录(版权所有,请勿转载 http://www.cnblogs.com/feng-sc) 本文在上一篇(OpenGL ES 光照模型之——环境光照(RenderMonkey测试))环境光基础上, ...

  2. OpenGL ES for Android 环境搭建

    在Android上运行OpenGL ES程序需要用到GLSurfaceView控件,GLSurfaceView继承自SurfaceView并实现了GLThread,通过OpenGL ES进行绘制. O ...

  3. Android 中建立一个OpenGL ES的开发环境

    转自: http://wiki.eoe.cn/page/Building_an_OpenGL_ES_Environment.html 负责人:zhangql原文链接:http://docs.eoean ...

  4. Android OpenGL ES 开发(二): OpenGL ES 环境搭建

    零:环境搭建目的 为了在Android应用程序中使用OpenGL ES绘制图形,必须要为他们创建一个视图容器.其中最直接或者最常用的方式就是实现一个GLSurfaceView和一个GLSurfaceV ...

  5. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  6. OpenGL ES 入门

    写在前面 记录一下 OpenGL ES Android 开发的入门教程.逻辑性可能不那么强,想到哪写到哪.也可能自己的一些理解有误. 参考资料: LearnOpenGL CN Android官方文档 ...

  7. Opengl ES之VBO和VAO

    前言 本文主要介绍了什么是VBO/VAO,为什么需要使用VBO/VAO以及如何使用VBO和VAO. VBO 什么是VBO VBO(vertex Buffer Object):顶点缓冲对象.是在显卡存储 ...

  8. Opengl ES之纹理贴图

    纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...

  9. Opengl ES之四边形绘制

    四边形的绘制在Opengl ES是很重要的一项技巧,比如做视频播放器时视频的渲染就需要使用到Opengl ES绘制四边形的相关知识.然而在Opengl ES却没有直接提供 绘制四边形的相关函数,那么如 ...

随机推荐

  1. check_http检查http服务

    选 项 说 明 -H, --hostname=ADDRESS 主机名或域名 -I, --IP-address=ADDRESS server的IP地址,用于在不能DNS的情况下 -p, --port=I ...

  2. mysql 变量名称不能与表字段一致

    my sql的变量名称不能与表字段名称相同不然会有各种异常问题 啃爹

  3. Access-Control-Allow-Origin与跨域

    文章转载地址: http://freewind.me/blog/20140327/2456.html 问题 在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题.另一个域名必须在resp ...

  4. Numpy 常用函数

    保存文件i3 = eye(3) 创建一个3*3 的单位矩阵savetxt('eye.txt',i3) #保存矩阵 读取文件c,v=np.loadtxt('data.csv', delimiter=', ...

  5. 数学分析中jensen不等式由浅入深进行教学(转)

    中国知网:数学分析中Jensen不等式由浅入深进行教学

  6. crsf 跨站请求伪造

    [crsf 跨站请求伪造] CSRF(Cross-site request forgery),中文名称:跨站请求伪造.核心为利用浏览器帮助提交cookie.采用随机数方可防御.估计大部小站均无CSRF ...

  7. overflow: scroll

    overflow: scroll在安卓5.0的情况下,不论内容是否填满屏幕,都会强制解析出滚动条,所以最好是使用overflow: auto

  8. pairs

    pairs http://acm.hdu.edu.cn/showproblem.php?pid=5178 Time Limit: 2000/1000 MS (Java/Others)    Memor ...

  9. 解决SpringBoot中webScocket不能注入bean的问题

    最近在做websocket聊天,但是遇到一个问题,就是在websocket的服务中要调用Service层的东西.首先我想到的是通过@Autowire注解来实现bean的注入.但是进过测试发现,注入的b ...

  10. 整合Struts2框架和Spring框架

    -----------------------siwuxie095                                 整合 Struts2 框架和 Spring 框架         1 ...