Contents:
- 1 °³¿ä
- 2 °ü·Ã¼Àû
- 3 Áֿ丵ũ
- 4 Rendering Pipeline
- 5 Implementation
- 5.1 View Transform
- 5.2 Projection Transform
- 6 ´Ù¿î·Îµå
- 7 °ü·Ã¸µÅ©
°¡°øÇÒ ¼º´É
.gif)
ÀÇ 3D °¡¼Ó±â ½Ã´ë¿¡ ¿Ø Software Rendering...? ´Ü¼øÈ÷ »ý°¢Çϸé ÇÊ¿ä¾ø´Â °ÍÀÏÁöµµ ¸ð¸¥´Ù. ±×·¯³ª 3D °¡¼Ó±â¶ó°í ÇØµµ ÇÙ½É Ä¨ÀÎ
GPU ÀÇ Rendering Algorithm Àº Software Rendering °ú ¿ª½Ã µ¿ÀÏ ±¸Á¶·Î µÇ¾î ÀÖ´Ù. Áï, Rendering Algorithm À» Çϵå¿þ¾î¿¡ ¸Â°Ô ¿Å°Ü³õÀº °ÍÀÏ»ÓÀÌÁö º°·Î Â÷À̰¡ ¾ø´Ù. ±×¸®°í Çϵå¿þ¾î Ư¡»ó Algorithm º¯°æÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡ Çϵå¿þ¾î °¡¼ÓÀ» ÀÌ¿ëÇÏ´Â ¸ðµç °ÔÀÓµéÀÌ ºñ½ÁÇÑ ¿µ»óÀ» º¸¿© ÁÖ°í ÀÖ´Ù. ±×·¡¼ Vertex Shader ³ª Pixel Shader °¡ µîÀåÇÏ°Ô µÈ ÀÌÀ¯ÀÏÁö ¸ð¸¥´Ù.
¾î°µç Software Rendering À» °øºÎÇÏ´Â ÀÌÀ¯´Â 3D °¡¼Ó±âÀÇ ±¸Á¶¸¦ ÀÌÇØÇÏ°í °ÔÀÓ¿¡¼
100% ÀÇ °¡°øÇÒ ¼º´ÉÀ» ²ø¾î³»´Â °ÍÀÌ ¸ñÀûÀÌ´Ù.
- 3D °ÔÀÓ ÇÁ·Î±×·¡¹Ö & ÄÄÇ»ÅÍ ±×·¡ÇÈÀ» À§ÇÑ ¼öÇÐ
- Eric Lengyel Àú, ·ù±¤ ¿ª, Á¤º¸¹®È»ç
- OPENGL À» ÀÌ¿ëÇÑ ÄÄÇ»ÅÍ ±×·¡ÇȽº Á¦2ÆÇ
- EDWARD ANGEL Àú, ±¸ÀÚ¿µ ¿ª, ¿µÇÑÃâÆÇ»ç
Real-Time Rendering 2ÆÇ
- Tomas Akenine-Moller.Eric Haines °øÀú, ½Åº´¼®.¿À°æ¼ö °ø¿ª, Á¤º¸¹®È»ç
- Tricks of the 3D Game Programming Gurus: Advanced 3D Graphics and Rasterization
3 Áֿ丵ũ #
³ª¸§´ë·Î °øºÎÇÑ ³»¿ëÀ» °£·«ÇÏ°Ô ±×¸²À¸·Î ±×·Áº» °ÍÀ¸·Î OpenGL À̳ª DirectX ¿¡ ºñÇϸé Å͹«´Ï ¾øÀÌ ºÎÁ·ÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. ¾ÆÁ÷ ¿Ï¼ºµÈ °ÍÀº ¾Æ´ÏÁö¸¸ ÇÊ¿äÇÑ ºÎºÐ¸¸ ³ª¿µÇ¾î ÀÖÀ¸¸ç ¾ÕÀ¸·Î °è¼Ó º¸¿ÏÇØ¾ß ÇÒ ºÎºÐÀÌ ¸¹´Ù.
Á»´õ ÀÚ¼¼ÇÑ Rendering Pipeline ¿¡ ´ëÇÑ ±×¸²Àº ¾Æ·¡ÀÇ ¸µÅ©¿¡¼ ãÀ» ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ³Ê¹« º¹ÀâÇØ¼...
1 void LookAt( CVector4 & vTarget, CVector4 & vCamera, CVector4 & vUp )
2 {
3 CVector4 vR, vU, vD;
4 CMatrix4 temp;
5
6 vUp.Normalize();
7
8 vD = vTarget - vCamera;
9 vD.Normalize();
10
11 vR = vUp ^ vD;
12 vR.Normalize();
13
14 vU = vD ^ vR;
15
16 temp.Initialize(
17 vR.x, vU.x, vD.x, 0.0f,
18 vR.y, vU.y, vD.y, 0.0f,
19 vR.z, vU.z, vD.z, 0.0f,
20 -( vCamera * vR ), -( vCamera * vU ), -( vCamera * vD ), 1.0f
21 );
22
23 m_CTMatrix *= temp;
24 }
5.2 Projection Transform #
1 void PerspectiveFOV( float fFov, float fAspect, float fNearZ, float fFarZ )
2 {
3 CMatrix4 temp;
4
5 float w, h;
6 float d;
7
8 w = 1.0f / tanf( fFov * 0.5f );
9 h = 1.0f / ( tanf( fFov * 0.5f ) * fAspect );
10
11 d = fFarZ / ( fFarZ - fNearZ );
12
13 temp.Initialize(
14 w, 0.0f, 0.0f, 0.0f,
15 0.0f, h, 0.0f, 0.0f,
16 0.0f, 0.0f, d, 1.0f,
17 0.0f, 0.0f, -( d * fNearZ ), 0.0f
18 );
19
20 m_CTMatrix *= temp;
21 }
SubCategoryGame