我要发帖 回复

管理员

735

主题

2万

积分

30

专家分

忠于职守杰出贡献鼓励

兴趣点(最多三项):

建模技术

私信
发表时间 : 2013-11-14 23:02:38 | 浏览 : 2908    评论 : 1
源码分类
原创性: 原创
源码类型: OpenGL
支撑软件: opengl
目录截图: -
文件大小: -
代码开放性: 完全开源
通过下面几步实现:
1.设定一个附加裁减平面
2. 并把摄像机位置设置到当然视点对称的位置, 渲染平面以上部分到一个纹理.
3. 将反射平面的顶点传入VS, 并乘以投影矩阵.得到平面投影点的坐标.
4. 将上述插值传入PS, 并同时除以W, 并(projCoord+1.0f)*0.5f.
5. 再查询渲染得到的纹理, 并加入点噪声, 有水波纹的效果.

VS/PS 如下:

//LakeVS.cg

uniform float4x4 modelViewProj : state.matrix.mvp;

void main(float4 Iposition : POSITION,
     float2 Itexcoord : TEXCOORD0,
out float4 oPosition : POSITION,
     out float3 objectPos : TEXCOORD0,
     out float4 viewCoord : TEXCOORD1,
     out float2 Otexcoord : TEXCOORD2)
{
  oPosition = mul(modelViewProj, Iposition);
  objectPos = Iposition.xyz;
  viewCoord = oPosition;
  Otexcoord = Itexcoord;
}

//LakePS.cg

uniform sampler2D refMap;
uniform sampler2D fraMap;
uniform sampler2D dudvMap;

uniform float timeline;
uniform float3 eyePosition;

void main(float4 Iposition : TEXCOORD0,
     float4 viewCoord : TEXCOORD1,
     float2 Itexcoord : TEXCOORD2,
     out float4 color : COLOR)
{
float4 bump = tex2D(dudvMap, Itexcoord);
bump = (bump-0.5)/2;
   
float cosangle = dot(normalize(eyePosition-Iposition.xyz), float3(0.0f, 1.0f, 0.0f));
float4 fogColor = float4(0.230, 0.266, 0.722, 1.0);

float dis = distance(Iposition.xyz, eyePosition);
float factor = clamp(dis/300, 0.0f, 1.0f);
   
float4 projCoord = viewCoord / viewCoord.z;

projCoord = (projCoord + 1.0)*0.5;
projCoord += bump*0.8*(1-factor);
projCoord = clamp(projCoord, 0.001, 0.999);
projCoord.x = -projCoord.x;
   
float4 projCoord1 = projCoord;
   
projCoord1.x = -projCoord1.x;

float4 basecolor = tex2D(refMap, projCoord.xy)*0.95f;
float4 basecolor1 = tex2D(fraMap, projCoord1.xy)*0.3f;

float4 finalcolor = lerp(basecolor, basecolor1, saturate(cosangle/0.779f));

color = finalcolor;
}



演示和代码下载:

最近VR访客查看更多↓

言木 评论于2019-12-13 14:47:29
obuil 发表于 2013-11-14 11:02 PM
通过下面几步实现:
1.设定一个附加裁减平面
2. 并把摄像机位置设置到当然视点对称的位置, 渲染平面以上部分 ...

感谢分享

手机版|VR开发网 ( 津ICP备18009691号 ) 统计 网安备12019202000257

GMT+8, 2020-9-19 11:08 AM

返回顶部