RenderMonkey 练习 第四天 【OpenGL Texture Bump】
BumpTexture
1. 新建一个OpenGL 空effect;
2. 添加相关变量
右击Effect节点选择Add Variable->float->float / float3 添加镜面光强度、灯光位置和相机位置参数:
float fSpecularPower = 25.0;
float3 vec3LightPosition = {-100.0,100.0,100.0};
float3 vec3EyePosition = {0,0,100.0};
右击Effect节点选择AddTexture->Add 2DTexture 添加base和bump两张纹理图片:
Fieldstone.tga ----> base
FieldstoneBumpDOT3.tga -----> bump
右击Effect节点选择Add Variable->Color 添加 环境光、散射光、镜面光颜色
fvAmbient = {0.3,0.3, 0.3};
fvDiffuse = {0.86,0.86,0.86};
fvSpecular = {0.57,0.56,0.58};
3. 修改Stream Mapping 中 添加NORMAL、TexCoord 、 BINORMAL、TANGENT

4. 在pass0中添加纹理对象 AddTextureObject 将base和bump图片添加进去,重新命名为baseMap和bumpMap
5. 修改vertex shader :
uniform vec3 vec3LightPosition;
uniform vec3 vec3EyePosition;
varying vec2 texcoord;
varying vec3 viewDirection;
varying vec3 lightDirection;
attribute vec3 rm_BiNormal;
attribute vec3 rm_Tangent;
void main(void)
{
gl_Position = ftransform();
texcoord = gl_MultiTexCoord0.xy;
vec4 fvObjectPosition = gl_ModelViewMatrix * gl_Vertex;
vec3 fviewDirection = normalize(vec3EyePosition - fvObjectPosition.xyz);
vec3 flightDirection = normalize(vec3LightPosition - fvObjectPosition.xyz);
vec3 fvNormal = gl_NormalMatrix * gl_Normal;
vec3 fvBiNormal = gl_NormalMatrix * rm_BiNormal;
vec3 fvTangent = gl_NormalMatrix * rm_Tangent;
viewDirection.x = dot(fvTangent, fviewDirection);
viewDirection.y = dot(fvBiNormal, fviewDirection);
viewDirection.z = dot(fvNormal, fviewDirection);
lightDirection.x = dot(fvTangent, flightDirection);
lightDirection.y = dot(fvBiNormal, flightDirection);
lightDirection.z = dot(fvNormal, flightDirection);
}
6.修改pixel shader:
uniform vec4 fvAmbient;
uniform vec4 fvSpecular;
uniform vec4 fvDiffuse;
uniform float fSpecularPower;
uniform sampler2D baseMap;
uniform sampler2D bumpMap;
varying vec2 Texcoord;
varying vec3 ViewDirection;
varying vec3 LightDirection;
void main( void )
{
vec3 fvLightDirection = normalize( LightDirection );
vec3 fvNormal = normalize( ( texture2D( bumpMap, Texcoord ).xyz * 2.0 ) - 1.0 );
float fNDotL = dot( fvNormal, fvLightDirection );
vec3 fvReflection = normalize( ( ( 2.0 * fvNormal ) * fNDotL ) - fvLightDirection );
vec3 fvViewDirection = normalize( ViewDirection );
float fRDotV = max( 0.0, dot( fvReflection, fvViewDirection ) );
vec4 fvBaseColor = texture2D( baseMap, Texcoord );
vec4 fvTotalAmbient = fvAmbient * fvBaseColor;
vec4 fvTotalDiffuse = fvDiffuse * fNDotL * fvBaseColor;
vec4 fvTotalSpecular = fvSpecular * ( pow( fRDotV, fSpecularPower ) );
gl_FragColor = ( fvTotalAmbient + fvTotalDiffuse + fvTotalSpecular );
}
7. 效果图

RenderMonkey 练习 第四天 【OpenGL Texture Bump】的更多相关文章
- 初试PyOpenGL四 (Python+OpenGL)GPU粒子系统与基本碰撞
这篇相当于是对前三篇的总结,基本效果如下: 在初试PyOpenGL一 (Python+OpenGL)讲解Pyopengl环境搭建,网格,球体,第一与第三人称摄像机的实现.在初试PyOpenGL二 (P ...
- RenderMonkey 练习 第一天 【opengl 纹理】
础实例: 我们首先实现一个带纹理模型的显示,大体了解RenderMonkey的操作方式. 1. 打开RenderMonkey, 右击WorkSpace的Effect WorkSpace结点,选择Add ...
- 把Android原生的View渲染到OpenGL Texture
http://blog.csdn.net/u010949962/article/details/41865777 最近要把Android 原生的View渲染到OpenGL GLSurfaceView中 ...
- Android OpenGL ES 开发(四): OpenGL ES 绘制形状
在上文中,我们使用OpenGL定义了能够被绘制出来的形状了,现在我们想绘制出来它们.使用OpenGLES 2.0来绘制形状会比你想象的需要更多的代码.因为OpenGL的API提供了大量的对渲染管线的控 ...
- RenderMonkey 练习 第二天 【opengl 光照模型】
光照模型 3D渲染中, 物体表面的光照计算公式为: I = 环境光(Iambient) + 漫反射光(Idiffuse) + 镜面高光(Ispecular); 其中,环境光(ambient)计算公式为 ...
- 最简单的视音频播放示例6:OpenGL播放YUV420P(通过Texture,使用Shader)
本文记录OpenGL播放视频的技术.上一篇文章中,介绍了一种简单的使用OpenGL显示视频的方式.但是那还不是OpenGL显示视频技术的精髓.和Direct3D一样,OpenGL更好的显示视频的方式也 ...
- OpenGL ES 光照模型之——环境光照(RenderMonkey测试)
概述及目录(版权所有,请勿转载 www.cnblogs.com/feng-sc/) 本文总结如何在RenderMonkey下做简单的OpenGL ES环境光光照模型测试. 主要包括如下内容: 1.使用 ...
- OpenGL ES学习笔记(三)——纹理
首先申明下,本文为笔者学习<OpenGL ES应用开发实践指南(Android卷)>的笔记,涉及的代码均出自原书,如有需要,请到原书指定源码地址下载. <OpenGL ES学习笔记( ...
- C#+OpenGL编程之再见小桃子(The Tao Framework)
本文基础: C#+OpenGL编程之OpenGL 纹理载入 C#+OpenGL编程之OpenGL 多重纹理 小桃子The Tao FrameworkTao提供的所有库都是完全开源的.其中的多数库都可以 ...
随机推荐
- Django_admin源码流程
admin.py from django.contrib import admin from . import models """ 通过原生的django admin来 ...
- hdu 3371(kruskal)
Connect the Cities Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- LeetCode Binary Tree PostorderTranversal
Problem Description Given a binary tree, return the postorder traversal of its nodes' values. For ex ...
- MVC - 12.HtmlHelper
1.动态生成URL @Url.Action("Index3","Stu3") @Url.RouteUrl("Default2", new { ...
- 友盟移动开发平台.NET版本SDK
由于项目需要给安卓.ios提供提送消息服务.找到了umeng这个平台,官方竟然没有提供.net版本的SDK,同时项目需要就拿出来和大家分享一下需要的同学们可以做个参考,建议官方提供.net版本. 这里 ...
- 画图工具除了echarts我使用highcharts
文件 :密码:xewx 官方文档教程地址:https://www.hcharts.cn/docs/basic-color 上手容易,api友好,尽管也有不尽人意的地方,但是它很适合我当前的项目,如果想 ...
- 转:攻击JavaWeb应用[3]-SQL注入
转:http://static.hx99.net/static/drops/tips-236.html 攻击JavaWeb应用[3]-SQL注入 园长 · 2013/07/16 18:28 注:本节重 ...
- Java并发编程实战笔记
如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误.有三种方式可以修复这个问题: i.不在线程之间共享该状态变量 ii.将状态变量修改为不可变的变量 iii.在访问状态变 ...
- 洛谷——P2813 母舰
P2813 母舰 题目背景 广东汕头聿怀初中 Train#3 Problem 1 (有没有红警既视感~) 题目描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普 ...
- Python的替换函数——strip(),replace()和re.sub()(转)
原文地址:http://blog.csdn.net/zcmlimi/article/details/47709049 在Python中常用的三个"替换"函数是strip(),rep ...