source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/shaders/sky_preetham.cg @ 3193

Revision 3193, 2.8 KB checked in by mattausch, 16 years ago (diff)

prepared meeting

Line 
1struct vtxin
2{
3        float4 position: POSITION;
4        float3 normal: NORMAL;
5        float3 color: COLOR;
6        float2 texcoord: TEXCOORD0;
7};
8
9
10// vtx output
11struct vtxout
12{
13        float4 color: COLOR0; 
14        float4 position: POSITION;
15
16        float4 texCoord: TEXCOORD0;   
17        float3 normal: TEXCOORD1;
18        float4 hdrColor: TEXCOORD2;
19};
20
21
22// fragment input
23struct fragin
24{
25        float4 color: COLOR0; 
26        //float4 projPos: WPOS;
27        //float4 position: POSITION;
28
29        float4 texCoord: TEXCOORD0;   
30        float3 normal: TEXCOORD1;
31        float4 hdrColor: TEXCOORD2;
32};
33
34
35struct pixel
36{
37        float4 col: COLOR0;
38        float3 norm: COLOR1;
39        float3 id: COLOR2;
40};
41
42
43
44//--------------------------------------------------------------------------------------
45// Vertex Shaders
46//--------------------------------------------------------------------------------------
47
48
49vtxout default_vs(vtxin IN,
50                                  uniform float3 lightDir,
51                                  uniform float2 thetaSun,
52                                  uniform float3 zenithColor,
53                                  uniform float3 aColor,
54                                  uniform float3 bColor,
55                                  uniform float3 cColor,
56                                  uniform float3 dColor,
57                                  uniform float3 eColor,
58                                  uniform float multiplier)
59{
60        vtxout OUT;
61
62        OUT.position = mul(glstate.matrix.mvp, IN.position);
63
64        const float dotLN = dot(lightDir, IN.normal);   
65        const float cos2gamma = dotLN * dotLN;
66
67        const float gamma = acos(dotLN);   
68        const float theta = dot(float3(.0f, .0f, 1.0f), IN.normal);
69
70    float3 num = (1.0f + aColor * exp(bColor / theta)) * (1.0f + cColor * exp(dColor * gamma) + eColor * cos2gamma);   
71        float3 den = (1.0f + aColor * exp(bColor)) * (1.0f + cColor * exp(dColor * thetaSun.x) + eColor * thetaSun.y);   
72    float3 xyY = (num / den) * zenithColor;   
73   
74    float3 XYZ;                                                                                             
75                                                                                                           
76    XYZ.x = (xyY.x / xyY.y) * xyY.z;                                                                       
77        XYZ.y = xyY.z;                                                                                         
78        XYZ.z = ((1.0f - xyY.x - xyY.y) / xyY.y) * xyY.z;   
79       
80    const static float3x3 conv_Mat =
81                float3x3( 3.240479f, -1.537150f, -0.498535f,
82                         -0.969256f,  1.875992f,  0.041556f,
83                              0.055648f, -0.204043f,  1.057311f);
84
85        OUT.color = float4(mul(conv_Mat, XYZ), 1.0f);
86
87        OUT.color.rgb *= multiplier;
88        /// put out color into different color channel to avoid clamping
89        OUT.hdrColor  = OUT.color;
90
91        OUT.normal = IN.normal;
92       
93        return OUT;
94}
95
96
97pixel frag_skydome(fragin IN)
98{
99        pixel pix;
100
101        pix.col = IN.hdrColor;
102        //pix.col.xyz = float3(0.3f, 0.6f, 1.0f);
103        // set depth to large value
104        pix.col.w = 1e20f;
105        pix.norm = IN.normal;
106        // the scene entity id
107        pix.id = glstate.fog.color.xyz;
108
109        return pix;
110}
Note: See TracBrowser for help on using the repository browser.