利用OGRE的海洋例子改成的水编辑器
来源:互联网 发布:软件项目验收 编辑:程序博客网 时间:2024/04/30 17:40
看了海洋的例子之后,我们知道其实水的效果关键就在于材质中各个属性的调节。所以我就以例子中的材质制做了一个可以加载和保存的水编辑器。
另外通过修改HLSL文件和material文件加上了透明度调节。
要修改的部分为:
PS声明:
fragment_program HLSL/Ocean2FS hlsl
{
source Ocean2HLSL_Cg.frag
entry_point main
target ps_2_0
default_params
{
param_named vertexcolor float4 1.0 1.0 1.0 1.0
}
}
材质中的定义
fragment_program_ref HLSL/Ocean2FS
{
param_named deepColor float4 0 0.3 0.5 1.0
param_named shallowColor float4 0 1 1 1.0
param_named reflectionColor float4 0.95 1 1 1.0
param_named reflectionAmount float 1.0
param_named reflectionBlur float 0.0
param_named waterAmount float 0.3
param_named fresnelPower float 5.0
param_named fresnelBias float 0.328
param_named hdrMultiplier float 0.471
param_named_auto vertexcolor custom 1
}
Ocean2HLSL_Cg.frag
/*********************************************************************NVMH3****
Copyright NVIDIA Corporation 2003
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
*AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Comments:
Simple ocean shader with animated bump map and geometric waves
Based partly on "Effective Water Simulation From Physical Models", GPU Gems
11 Aug 05: heavily modified by Jeff Doyle (nfz) for Ogre
******************************************************************************/
struct v2f {
float4 Position : POSITION; // in clip space
float3 rotMatrix1 : TEXCOORD0; // first row of the 3x3 transform from tangent to obj space
float3 rotMatrix2 : TEXCOORD1; // second row of the 3x3 transform from tangent to obj space
float3 rotMatrix3 : TEXCOORD2; // third row of the 3x3 transform from tangent to obj space
float2 bumpCoord0 : TEXCOORD3;
float2 bumpCoord1 : TEXCOORD4;
float2 bumpCoord2 : TEXCOORD5;
float3 eyeVector : TEXCOORD6;
};
float4 main(v2f IN,
uniform sampler2D NormalMap,
uniform samplerCUBE EnvironmentMap,
uniform float4 deepColor,
uniform float4 shallowColor,
uniform float4 reflectionColor,
uniform float reflectionAmount,
uniform float reflectionBlur,
uniform float waterAmount,
uniform float fresnelPower,
uniform float fresnelBias,
uniform float hdrMultiplier,
uniform float4 vertexcolor
) : COLOR
{
// sum normal maps
// sample from 3 different points so no texture repetition is noticeable
float4 t0 = tex2D(NormalMap, IN.bumpCoord0) * 2.0 - 1.0;
float4 t1 = tex2D(NormalMap, IN.bumpCoord1) * 2.0 - 1.0;
float4 t2 = tex2D(NormalMap, IN.bumpCoord2) * 2.0 - 1.0;
float3 N = t0.xyz + t1.xyz + t2.xyz;
float3x3 m; // tangent to world matrix
m[0] = IN.rotMatrix1;
m[1] = IN.rotMatrix2;
m[2] = IN.rotMatrix3;
N = normalize( mul( N, m ) );
// reflection
float3 E = normalize(IN.eyeVector);
float4 R;
R.xyz = reflect(E, N);
// Ogre conversion for cube map lookup
R.z = -R.z;
R.w = reflectionBlur;
float4 reflection = texCUBEbias(EnvironmentMap, R);
// cheap hdr effect
reflection.rgb *= (reflection.r + reflection.g + reflection.b) * hdrMultiplier;
// fresnel
float facing = 1.0 - max(dot(-E, N), 0);
float fresnel = saturate(fresnelBias + pow(facing, fresnelPower));
float4 waterColor = lerp(shallowColor, deepColor, facing) * waterAmount;
reflection = lerp(waterColor, reflection * reflectionColor, fresnel) * reflectionAmount;
return (waterColor + reflection)*vertexcolor;
}
- 利用OGRE的海洋例子改成的水编辑器
- 利用OGRE的海洋例子改成的水编辑器
- OGRE Demo_Ocean 例子的分析
- OGRE Demo_Instancing 例子的分析
- 一个不错的OGRE编辑器
- OGRE(八):Ogre例子中的Character脱离Browser的代码
- ogre的Demo_CameraTrack例子程序的问题
- Ogre海洋Demo注释
- 沉默的海洋
- 爱的海洋
- 简历的海洋
- 海底下面的海洋
- 知识的海洋
- 知識的海洋
- 爱的海洋
- 爱的海洋
- 翱翔GitHub的海洋
- 未知代码的海洋
- 我不喜欢理智的女人,一点都不喜欢
- 开BLOG语:being a CODER
- 华硕笔记本重装XP经历分享----------(光驱不启动、xp驱动)
- 版本1.0配置文件
- 版本2.0字典类型
- 利用OGRE的海洋例子改成的水编辑器
- 这是我第一次写博客,该写点什么捏
- 局部ALERT效果
- Android学习——后台程序
- 大盘节节高 大非“套现”忙
- 版本2.0字典条目
- 《设计模式解析》学习笔记
- S3C2440核心板
- Delegate 委托