source: GTP/trunk/App/Demos/Illum/Shark3D/version164x12u/IllumDemo/src/res/levelutil/shader/prog/d3d9_hlsl/gtp_envmapSimple_d3d9_hlsl_ps1x1.s3d_shadercode @ 2196

Revision 2196, 2.7 KB checked in by szirmay, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14
15#define NITERATION 5
16
17struct PS_INPUT
18{
19float3 eye     : TEXCOORD0;
20float3 normal  : TEXCOORD1;
21float3 posView : TEXCOORD2;
22};
23
24sampler colorSamp: register(s0);
25sampler distanceSamp: register(s1);
26
27
28half3 Hit(samplerCUBE tex, half3 R, half3 p0)
29{
30        float rl = texCUBE(tex, R).r;
31        float dp = rl - dot(p0, R);
32        float3 p = p0 + R * dp;
33        float ppp = length(p) / texCUBE(tex, p).r;
34        float dun = 0, dov = 0, pun = ppp, pov = ppp;
35        if (ppp < 1) dun = dp; else dov = dp;
36        float dl = max( dp + rl * (1 - ppp), 0);
37        float3 RR = p0 + R * dl;
38
39        for(int i = 0; i < NITERATION; i++) {
40                float ddl;
41                float llp = length(RR) / texCUBE(tex, RR).r;
42                if (llp < 1) {
43                        dun = dl; pun = llp;
44                        ddl = (dov == 0) ? rl * (1 - llp) :
45                                (dl - dov) * (1 - llp)/(llp - pov);
46                } else {
47                        dov = dl; pov = llp;
48                        ddl = (dun == 0) ? rl * (1 - llp) :
49                                (dl - dun) * (1 - llp)/(llp - pun);
50                }
51                dl = max(dl + ddl, 0);
52                RR = p0 + R * dl;
53        }
54        return RR;
55}
56
57
58
59///////////////////////////////////////////////////////////////////////////////
60// Pixelshader
61// Profile: 3x0
62
63
64float4 main(PS_INPUT input): COLOR0
65{
66 //return  texCUBE(colorSamp, input.normal);
67//return float4(input.normal, 1);
68
69const float g_FresnelCoeff = 0.0;
70const float g_Transparency = 1.0;
71const float g_RefractFactor = 1.0f;
72
73float3 normal = normalize(input.normal);
74float3 eye = normalize(input.eye);
75
76float3 r1 = reflect(eye, normal);
77float3 r2 = refract(eye, normal, g_RefractFactor);
78float3 RR1 = Hit(distanceSamp, r1, input.posView);
79float3 RR2 = Hit(distanceSamp, r2, input.posView);
80
81// fresnel
82float fresnel = saturate(g_FresnelCoeff + (1.0f - g_FresnelCoeff) * pow(1 - dot(normal, -eye), 5));
83 
84//return float4(normal,1); 
85// lineáris interpoláció az átlátszóság szerint
86//return float4(lerp(fresnel * texCUBE(colorSamp, RR1).rgb,texCUBE(colorSamp, RR2).rgb,g_Transparency ),1.0f);
87return texCUBE(colorSamp, RR2);
88}
89
90///////////////////////////////////////////////////////////////////////////////
Note: See TracBrowser for help on using the repository browser.