1 |
|
---|
2 | struct PS_INPUT
|
---|
3 | {
|
---|
4 | float4 posScr: POSITION;
|
---|
5 | float2 texCoord: TEXCOORD0;
|
---|
6 | float nFace: TEXCOORD1;
|
---|
7 | };
|
---|
8 |
|
---|
9 |
|
---|
10 | struct PS_OUTPUT
|
---|
11 | {
|
---|
12 | float4 color: COLOR0;
|
---|
13 | };
|
---|
14 |
|
---|
15 | ///////////////////////////////////////////////////////////////////////////////
|
---|
16 |
|
---|
17 | sampler tex0: register(s0);
|
---|
18 |
|
---|
19 | ///////////////////////////////////////////////////////////////////////////////
|
---|
20 | // Pixelshader
|
---|
21 | // Profile: 2x0
|
---|
22 | const int CUBEMAP_SIZE = 128;
|
---|
23 | const int REDUCED_CUBEMAP_SIZE = 4;
|
---|
24 |
|
---|
25 | PS_OUTPUT main(PS_INPUT input)
|
---|
26 | {
|
---|
27 | //const int RATE = CUBEMAP_SIZE / REDUCED_CUBEMAP_SIZE;
|
---|
28 | const int RATE = 32;
|
---|
29 |
|
---|
30 | PS_OUTPUT output;
|
---|
31 | float3 dir;
|
---|
32 |
|
---|
33 | float4 color = float4(0,0,0,0);
|
---|
34 |
|
---|
35 | for (int i = 0; i < RATE; i++)
|
---|
36 | for (int j = 0; j < RATE; j++)
|
---|
37 | {
|
---|
38 | float2 pos;
|
---|
39 | pos.x = input.texCoord.x + (2*i + 1)/(float)CUBEMAP_SIZE;
|
---|
40 | pos.y = input.texCoord.y - (2*j + 1)/(float)CUBEMAP_SIZE;// y=-u
|
---|
41 |
|
---|
42 | // "scrambling"
|
---|
43 | if (input.nFace == 0) dir = float3(1, pos.y, -pos.x);
|
---|
44 | if (input.nFace == 1) dir = float3(-1, pos.y, pos.x);
|
---|
45 | if (input.nFace == 2) dir = float3(pos.x, 1, -pos.y);
|
---|
46 | if (input.nFace == 3) dir = float3(pos.x, -1, pos.y);
|
---|
47 | if (input.nFace == 4) dir = float3(pos.x, pos.y, 1);
|
---|
48 | if (input.nFace == 5) dir = float3(-pos.x, pos.y,-1);
|
---|
49 |
|
---|
50 | color += texCUBElod( tex0, float4(dir,0));
|
---|
51 | }
|
---|
52 |
|
---|
53 | output.color = color / (RATE * RATE);
|
---|
54 | return output;
|
---|
55 | }
|
---|
56 |
|
---|
57 | ///////////////////////////////////////////////////////////////////////////////
|
---|