[ Opengl ] Environment Mapping(sphere)
Environment mapping
환경맵을 활용, Sphere environment mapping을 진행하였다.
일반적으로 많이 사용하는 큐브 맵의 반사 색상 결정 공식이다.
큐브 맵 대신 Sphere map을 사용하여 환경맵을 만들기위해 다른 공식을 사용
해당 Sphere map을 임포트하고,
Sphere map 공식을 적용한 렌더링을 진행했다.
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
void Renderer::fill(GLubyte color[3])
{
...
for (k = xmin; k < xmax; k++)
{
sx = (m_AET[j].nx + deltaNX) * (ndirectionLight.x);
sy = (m_AET[j].ny + deltaNY) * (ndirectionLight.y);
sz = (m_AET[j].nz + deltaNZ) * (ndirectionLight.z);
scalaNL = sx + sy + sz;
rx = 2 * (m_AET[j].nx + deltaNX) * scalaNL - ndirectionLight.x;
ry = 2 * (m_AET[j].ny + deltaNY) * scalaNL - ndirectionLight.y;
rz = 2 * (m_AET[j].nz + deltaNZ) * scalaNL - ndirectionLight.z;
n = sqrt(pow(rx, 2) + pow(ry, 2) + pow(rz+1, 2));
if (m_AET[j].z + deltaZ < m_zBuffer[i][k])
{
s = max(rx / n,0.f) * 640;
t = max(ry / n,0.f) * 480;
checkImage[i][k][0] = (GLubyte)m_texture[t][s][0];
checkImage[i][k][1] = (GLubyte)m_texture[t][s][1];
checkImage[i][k][2] = (GLubyte)m_texture[t][s][2];
m_zBuffer[i][k] = m_AET[j].z + deltaZ;
}
deltaU += uPerX;
deltaV += vPerX;
deltaZ += zPerX;
deltaNX += nxPerX;
deltaNY += nyPerX;
deltaNZ += nzPerX;
}
}
출력
sphere map을 통한 환경맵이 적용된 모델이 렌더링 되는 것을 확인할 수 있었다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.