-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCubeMap.cpp
More file actions
62 lines (60 loc) · 1.63 KB
/
CubeMap.cpp
File metadata and controls
62 lines (60 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "CubeMap.h"
#include <string>
CubeMap::CubeMap(const char * directory)
{
std::string suffix[6] = {"left","right","up","down","front","back"};
std::string dirname(directory);
for(int ii = 0 ;ii<6;ii++){
std::string filename = dirname+"/";
filename = filename+suffix[ii];
filename = filename +".bmp";
t[ii].load(filename.c_str());
}
}
Vector3f CubeMap::operator()(const Vector3f & direction)
{
Vector3f dir = direction.normalized();
Vector3f outputColor (0.0f,0.0f,0.0f);
if ((fabsf(dir[0]) >= fabsf(dir[1]))
&& (fabsf(dir[0]) >= fabsf(dir[2])))
{
if (dir[0] > 0.0f)
{
outputColor = t[RIGHT]((dir[2] / dir[0]+ 1.0f) * 0.5f,
(dir[1] / dir[0]+ 1.0f) * 0.5f);
}
else if (dir[0] < 0.0f)
{
outputColor = t[LEFT]( (dir[2] / dir[0]+ 1.0f) * 0.5f,
1.0-(dir[1] / dir[0]+ 1.0f) * 0.5f);
}
}
else if ((fabsf(dir[1]) >= fabsf(dir[0])) && (fabsf(dir[1]) >= fabsf(dir[2])))
{
if (dir[1] > 0.0f)
{
outputColor = t[UP]((dir[0] / dir[1]+ 1.0f) * 0.5f,
(dir[2] / dir[1]+ 1.0f) * 0.5f);
}
else if (dir[1] < 0.0f)
{
outputColor = t[DOWN](1.0f-(dir[0] / dir[1]+ 1.0f) * 0.5f,
1.0f - (dir[2] / dir[1]+ 1.0f) * 0.5f);
}
}
else if ((fabsf(dir[2]) >= fabsf(dir[0]))
&& (fabsf(dir[2]) >= fabsf(dir[1])))
{
if (dir[2] > 0.0f)
{
outputColor = t[FRONT](1.0f - (dir[0] / dir[2]+ 1.0f) * 0.5f,
(dir[1] / dir[2]+ 1.0f) * 0.5f);
}
else if (dir[2] < 0.0f)
{
outputColor = t[BACK]((dir[0] / dir[2]+ 1.0f) * 0.5f,
1.0f-(dir[1] / dir[2]+ 1.0f) * 0.5f);
}
}
return outputColor;
}