RenderMonkey 练习 第五天 【OpenGL NormalMapping】
1. 新建一个OpenGL 空effect;
2. 添加相关变量
右击Effect节点选择Add Variable->float->float / float3 添加镜面光强度、灯光位置和相机位置参数:
float3 vec3LightPosition = {-100.0,100.0,100.0};
float3 vec3EyePosition = {0,0,100.0};
右击Effect节点选择AddTexture->Add 2DTexture 添加base和bump两张纹理图片:
base
normal
3. 修改Stream Mapping 中 添加Normal, TexCoord

4. 在pass0中添加纹理对象 AddTextureObject 将base和normal图片添加进去,重新命名为baseMap和normalMap
5. 修改vertex shader :
uniform vec3 vec3LightPosition;
uniform vec3 vec3EyePosition;
varying vec2 texcoord;
varying vec3 lightDirection;
varying vec3 viewDirection;
void main(void)
{
gl_Position = ftransform();
texcoord = gl_MultiTexCoord0.xy;
vec4 fvObjectPosition = gl_ModelViewMatrix * gl_Vertex;
viewDirection = normalize(vec3EyePosition - fvObjectPosition.xyz);
lightDirection = normalize(vec3LightPosition - fvObjectPosition.xyz);
}
6.修改pixel shader:
varying vec2 texcoord;
varying vec3 lightDirection;
varying vec3 viewDirection;
uniform sampler2D normalMap;
uniform sampler2D baseMap;
void main(void)
{
vec4 NormalMap = texture2D(normalMap,texcoord);
// convert to range -1.0 to 1.0
vec3 normal = NormalMap.xyz * 2.0 - 1.0;
vec3 N = normalize(normal.xyz);
vec3 L = normalize(lightDirection.xyz);
float fNDotL = dot(N,L);
vec3 fvReflection = normalize( 2 * normal * fNDotL - lightDirection);
float fRDotV = max(dot(fvReflection, viewDirection),0.0);
vec4 fvBaseColor = texture2D(baseMap,texcoord);
float fSpecularPower = 25.0;
vec4 fvTotalAmbient = vec4(0.3,0.3,0.3,1.0) * fvBaseColor;
vec4 fvTotalDiffuse = vec4(0.8,0.8,0.8,1.0) * max(fNDotL,0.0)* fvBaseColor;
vec4 fvTotalSpecular = vec4(0.6,0.6,0.6,1.0) * pow(fRDotV, fSpecularPower);
gl_FragColor = fvTotalAmbient + fvTotalDiffuse + fvTotalSpecular;
}
7. 效果图

RenderMonkey 练习 第五天 【OpenGL NormalMapping】的更多相关文章
- Android OpenGL ES 开发(五): OpenGL ES 使用投影和相机视图
OpenGL ES环境允许你以更接近于你眼睛看到的物理对象的方式来显示你绘制的对象.物理查看的模拟是通过对你所绘制的对象的坐标进行数学变换完成的: Projection - 这个变换是基于他们所显示的 ...
- RenderMonkey 练习 第二天 【opengl 光照模型】
光照模型 3D渲染中, 物体表面的光照计算公式为: I = 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular); 其中,环境光(ambient)计算公式为 ...
- RenderMonkey 练习 第一天 【opengl 纹理】
础实例: 我们首先实现一个带纹理模型的显示,大体了解RenderMonkey的操作方式. 1. 打开RenderMonkey, 右击WorkSpace的Effect WorkSpace结点,选择Add ...
- OpenGL ES 光照模型之——环境光照(RenderMonkey测试)
概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/) 本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试. 主要包括如下内容: 1.使用 ...
- OpenGL基础图形编程
一.OpenGL与3D图形世界1.1.OpenGL使人们进入三维图形世界 我们生活在一个充满三维物体的三维世界中,为了使计算机能精确地再现这些物体,我们必须能在三维空间描绘这些物体.我们又生活在一个充 ...
- 【转】OpenGL基础图形编程(一)
原文:http://blog.chinaunix.net/uid-20638550-id-1909183.html 分类: 一.OpenGL与3D图形世界 1.1.OpenGL使人们进入三维图形世界 ...
- 总结的比较好的OpenGL教程
OpenGL Programming Guide(红宝书) http://www.glprogramming.com/red/ OpenGL Reference Manual(蓝宝书) http:// ...
- 【GLSL教程】(二)在OpenGL中使用GLSL 【转】
http://blog.csdn.net/racehorse/article/details/6616256 设置GLSL 这一节讲述在OpenGL中配置GLSL,假设你已经写好了顶点shader和像 ...
- 三维投影总结:数学原理、投影几何、OpenGL教程、我的方法
如果要得到pose视图,除非有精密的测量方法,否则进行大量的样本采集时很耗时耗力的.可以采取一些取巧的方法,正如A Survey on Partial of 3d shapes,描述的,可以利用已得到 ...
随机推荐
- ExecutorService 用例
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Tes ...
- hdu 3435(KM算法最优匹配)
A new Graph Game Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- python中global变量释疑
疑问 为什么main中不能写global x语句? 在函数中如何修改global变量? 在main中修改了global变量后,在子进程中为什么没有效果? 如何利用进程池的initializer参数(函 ...
- python资源合集
Python 官网: https://www.python.org/ Python2.7 doc: https://docs.python.org/2/ Python Package User Gui ...
- webpy 访问静态文件
1.在项目的根目录创建static文件夹 能够直接在网页中访问static文件夹中的文件 如果static文件夹有一个文件为favicon.ico,那么访问的地址为127.0.0.1:8080/sta ...
- Java学习笔记(三)——静态导入,package-info,Fall-through
[前面的话] 算是真正的放松了好几天时间,没有看任何书,没有任何任务,今天是过完年后的第一天上班时间,我又开始了我的学习之路,感觉还没有老,怎么心态越来越平静了,进入工作状态,就好好努力工作,新的一年 ...
- vue-touch不支持vue2.0的替换方法
当你想用vue-touch时,却发现官网这句话 Touch events plugin for Vue.js. This plugin does not support Vue 2.0 yet. 但是 ...
- gulp-基本功能总汇
研究了三天的gulp,今天做一个结束吧. 本次包含的功能有: html压缩 图片压缩 css压缩 js检测 js压缩 文件合并 文件更名 提示信息 编译less 创建服务器-浏览器实时刷新 因为我安装 ...
- CentOS7.5删除旧的内核
[root@localhost ~]# uname -r3.10.0-862.3.2.el7.x86_64 [root@localhost ~]# rpm -qa | grep kernelkerne ...
- 【转载】Banner框架
原文地址:https://github.com/youth5201314/banner 以前banner都自己写,又丑问题又多,在github上找到一个点赞最多的,动画效果那是绚丽多彩啊,好东东当然要 ...