E D R , A S I H C RSS

D3D

ž‘„ฑž: ๊น€˜˜„(erunc0), ตœ๊‘‹(woodpage)

"Advanced 3D Game Programming using DirectX" - study.


GameLibrary( http://www.zeropage.org/~erunc0/study/d3d/GameLib.zip )ฅผ งŒ“ค– ๊ฐ€„œ ฑ…˜ ‚šฉ„ ณธ‹คŠ”.. ญญญ..

งงŒ ๊ทธ ‡€, library€ถ„€ Œ€ถฉ •˜Š” Š‚Œ “œŠ”๊ฑ ™œธ€.

ญ, library€ถ„€ api ˆ๊ธฐ™” ฃจ‹ €ถ„ •„๊ณ , DX „ —ญ‹œ ˆ๊ธฐ™” €ถ„ •„ฅผ

ฌถ– †“€  •„๊ธฐ •Œฌธ— ••˜Š”ฐ – ค›€€ —†—ˆ‹ค. --;;

Game ฑ…„ ‚ฌ„œ D3Dฅผ ณธ›„, 3Dฅผ ๊ณต€•˜ คŠ” งˆŒœผกœ ƒ€‹ค. ฆฌ—† ˜ˆ œฅผ Š”‹œผกœ • ๊ฒƒž„.

1. ‘œ

3Dฅผ šฉ•œ ˜คฝ งŒ“ค๊ธฐ.

๊ตฌ ธ๊ฑ ‘˜„œ ƒ๊ฐ• ณผ๊ฒƒž„.

-- v.

2. ง„–‰ ƒ™

2.1. 1›” 8ผ

  • ˜˜„ Œ.. ง˜— “ค€ •ŠŠ”‹ค. Šจ †Œฆฌธ€ ๊ฐˆ”ผฅผ žก€ •˜Š”๊ฒŒ ˜„‹ค‹ค. ๊€ จ ฑ…ผ„ € ••˜๊ฒ ‹ค.
    •ฝ๊ฐ„€ „ค… ฏธก•œ๊ฒƒ ๊ฐ™‹ค. ‚๊ฐ€ ž๊ธฐ •Œฌธผˆ˜„ žˆ€งŒ, ใ…‹ใ…‹ใ…‹
    •„ง๊นŒ€, ˜ˆ œ‹คš ˜ˆ œฅผ ‹ค. 3D objectฅผ ณธ  —†Œ. •„ง๊นŒ€.. --; - 232p/602p...
  • ‘‹ ฑ… ฎ€€ •œ 20œ๊ฑฐ ๊ฐ™‹ค. ˜ธต˜ธต ๊ฐ€€๊ณ  ๊ธฐ–ต •ˆ‚œ‹ค. ‹ˆ๊ฐ€ –…ผ๊ฑฐฅผ Š”๊ฑฐกœ ‹œž‘•œ‹ค.

2.2. 1›” 9ผ

  • potential function— Œ€•„œงŒ ‹ค.. •ฝ๊ฐ„ “ธงŒ•œ •Œ๊ณ ฆฌฆ˜(?) ธ๊ฒƒ ๊ฐ™‹ค. ใ…‹ใ…‹ใ…‹
    ‹คŒ— ‚˜˜คŠ” PathPlan— ๊€•œ–˜๊ธฐŠ” ‰ฌš๊ฒƒ ๊ฐ™€ฐ. žฅ‚œ •„‹ˆ‹ค.
    จธฆฌ •„”„‹ค. - 249p/602p...
  •  „—„ Š‚€๊ฑฐ€งŒ ฑ…˜ D3Dˆž—๊ฒŒŠ” € •„‹Œ๊ฑฐ ๊ฐ™‹ค. ˜คŠ˜ „„œ๊€—๊ฐ€„œ ฑ…€ นŒ ค•ผ๊ฒ ‹ค ‘‹
  • ฑ…น„Ÿฌ ๊ฐ„‹ค. 3D— ๊€•œฑ….. --+ ‹  ฑ… ๊ฒœ ˆžฅผ œ„•œ๊ฒŒ •„‹Œ๊ฑฐ ๊ฐ™–.. --+ งฑ‚˜ งฑ‚˜.. ˜˜„

2.3. 1›” 10ผ

  • Ÿฐ – œ ฑ… นŒ ธ‹ค ˜คŠ˜ นŒ ค•ผ๊ฒ ‹ค --; ‘‹

2.4. 1›” 11ผ

  • ž ‹œ ™„. ๊‘‹•œ…Œ นŒฆฐ ฑ…œผกœ 3Dฅผ ๊ณต€.

~cpp 
ฟ ฟ .. —‹ฌ๊ตฌ‚˜.. ^^a.. DX ๊ณต€•˜ ‚˜คŒ ๊ฐˆผœ‹ค˜ค.. —ค—ค.. ‚˜‘ €๊ธˆ •˜๊ตฌ žˆŠ”๊ฑฐ.. ‹œ๊ฐ„˜ —ฌ๊ธฐ‹ค(œ„‚ค..) “ธ๊˜..
„ˆ„ค‘ ๊ณง •„š”•งˆ ‚šฉ žˆ„…Œ‹ˆ.. ๊ทผฐ €๊ธˆ€ ‚ฝ”๊ฐ€ € „žผ„œ.. ‹œ๊ฐ„— ซ“๊ธฐŠ” ๊€๊ณ„กœ.. –ธ  ๊ฐ€.. ๊ผญ.. ^^;; - •„ฑ
˜ค˜ท.. •„ฑ๊ฐ€ ๊ธ€„ ผ‹ค! --„ฒœ

3. Direct 3D

3.1. Chapter 1.

Ÿฐ ข…ฅ˜˜ ฑ…“ค ‹ค ๊ทธ ‡“ฏ, winapiฅผ ‚ฌšฉ•œ‹ค.

๊ทธ ‡๊ธฐ •Œฌธ—, ˆฐ˜˜ •œ chapterŠ” ๊ฑฐ˜‹ค winapiฅผ ‚ฌšฉ•„œ

"Hello, World!"ฅผ ฐŠ” sourceฅผ „ฃ– €‹ค. --;

3.2. Chapter 2.

DX ˆ๊ธฐ™” ฃจ‹๊ณผ, game loop(message loop)ฅผ ฌ••œ libraryฅผ ‹ค œกœ งŒ“ ‹ค.

๊ทธฆฌ๊ณ , ˜ˆ œ source 1๊ฐœ •„.. —ฌ๊ธฐ ๊นŒ€ Œ.. - ๊ณง update , 01.06.2002 Sun

...

ŠฌŠฌ ฑ… งœฆ‚˜ ค๊ณ  •œ‹ค. --+ ๊ทธƒฅ ๊ฐ„‹จ•˜๊ฒŒ ฑ…—„œ  œ๊ณต•˜Š” libraryฅผ “ฐ chapter2Š” †”งžˆ

€ •Š•„„  ๊ฒƒ ๊ฐ™‹ค. Šจ †Œฆฌ“ค„ •˜Š”€.  „€ ˆ๊ธฐ™”.. --+ •ˆ˜ „ค… ฟ„ค. ฏธ.. ๊ทธƒฅ..

ผฐ˜ ธ 3D•ผ๊ธฐฅผ ‚๊ฒƒ„.. Game„ ‚ฌ„œ.. T-T •„Šผ ๊ธฐŠ” ‹ค •€. DX Š” • ๊ฒƒ  •ง ˆ๊ธฐ™” ฟ˜๊ฐ€?

chapter 3 €„ฐŠ” ˆ˜•™ž‹ˆ‹ค.. --;;

  • Chapter 2: skip. ˆ๊ธฐ™” €ถ„ •„. šก„ฑ ˆ˜„คž„. Šจ †Œฆฌ•˜Š”€ •Œ•„ จน„  •„ž„.

‘‹•„ Chapter2 € ‹ˆ๊ฐ€  •ฆฌ•ผ. ‚œ Š”๊ฒŒ งœฆ‚˜„œ • จน๊ฒ ‹ค. ›„›„›„. ๊ฐ™ •˜‹ˆ ๊ฒŒ Žธ•˜๊ตฐ.. €€
๊ฑฐ  •ฆฌ•˜Š”๊ฑ ฆฌ‹ค--;
~cpp 
ถ”ฒœ „„œ: Inside DirectX (•„š”กœ •œ‹ค ง•˜‹œ˜ค.  „žฑ…œผกœ žˆ–š”. --;;)
           Tricks of the Windows Game Programming Gurus : Fundamentals of 2D and 3D Game Programming. (DirectX, DirectMusic, 3D sound)

3.3. Chapter 3. 3D ˆ˜•™  ๊ธฐˆ (50%~60%)

 chapterŠ” math3DผŠ” libraryฅผ งŒ“œŠ” chapter‹ค

.. 1›” 8ผ ˜„žฌ..  €ถ„€ —„ฒญ‚œ €™”๊ฐ€ š”๊ตฌ.. --a

ฑ…˜ ‚šฉค‘ Š” ๊ฒƒ „ˆ งŽ‹ค. •„‹ˆ, ง – คš๊ฒƒ ๊ฐ™‹ค.

3.3.1.  

 € 3D ๊ทธž˜”ฝ—„œ ๊ฐ€žฅ ค‘š”•œ š”†Œž‹ˆ‹ค. ฑ…—„œ ๊ทธŸฌฐš”.

-  € 3D ๊ณต๊ฐ„—„œ˜ •˜‚˜˜ œ„น˜๊ณ , ฒก„ฐŠ” 3D๊ณต๊ฐ„ ‚—„œ › œผกœ€„ฐ •˜‚˜˜ œ„น˜ฅผ ž‡Š” ง„ ‹ค. -

vector(3D ๊ณต๊ฐ„ƒ˜   žˆŠ” ผ ••œ ๊ฑฐฆฌ)˜ ฌ๊ธฐ (magnitude)ฅผ ๊ตฌ•˜Š” ๊ณต‹€

~cpp 
   ‹ค“ค •Œ๊ณ  ๊ณ„‹œ ธ? --;; •˜•˜..
‹จœ„ ฒก„ฐ- „ธ๊ฐœ˜ ฃผš” •“ค˜ ฐฉ–ฅ„ ‚˜ƒ€‚๊ธฐ œ„•œ ฒก„ฐ.

i<1,0,0>, j<0,1,0>, k<0,0,1>

i, j, kฒก„ฐ˜ „ ˜• กฐ•œผกœ 3D‚˜ –– •œ  ผ„ ‚˜ƒ€‚ผˆ˜ žˆ‹ค.


a = <3, 5, 2>

a = 3i+5j+2k

๊ทธฆฌ๊ณ ,  Šน„ฑœผกœ ธ• –‰ ฌ๊ณผ –‰ ฌ„ ‘œ˜„•˜Š” ๊ณต๊ฐ„„ „ค…•  •Œ งคšฐ ค‘š”‹œ œ‹ค.

3.3.2. point3 ๊ตฌกฐ

3D „ บกŠ™” •˜๊ธฐœ„•œ ๊ตฌกฐ.
~cpp 
struct point3
{
 union // use union - ฉ”ฆฌฅผ ๊ณตœ •˜Š” „ฑถ„“ค— ฆ„„ € ••˜Š”ฐ ‚ฌšฉ.
 {     // y€ˆ˜™€ v[1]€ˆ˜Š” ๊ฐ™€ ฉ”ฆฌ กฐ๊ฐ„ ‚˜ƒ€‚ธ‹ค.
   struct
   {
     float x, y, z; // ๊ตฌกฐ˜ ฆ„  •˜˜€ •Š•˜€ •Œฌธ— x,y,z „ฑถ„„ ›ž ‹จœ„กœ ‚ฌšฉ.
   };
   float v[3];
 }

 point3 () {}
 point3 (float X, float Y, float Z) : x(X), y(Y), z(Z) {} // ˆ๊ธฐ™” ก„ ‚ฌšฉ. (compiler๊ฐ€ ž‘—…„ ” ž˜ ˆ˜–‰•  ˆ˜ žˆ„ก •€‹ค”๊ตฐ.)
 // ...
};

3.3.3. point3˜ —ฐ‚ฐž™€ ๊ธฐณธ  •ˆ˜

~cpp 
struct point3
{
 ...
 point3 operator +(point3 const &a, point3 const &b);
 point3 operator -(point3 const &a, point3 const &b);
 point3 operator *(point3 const &a, float const &b);
 point3 operator *(float const &a, point3 const &b);
 point3 operator /(point3 const &a, float const &b);
 ...
};
// ขŒ‘œ • ‹น
inline void point3::Assign (float X, float Y, float Z)  
{
 x = X; y = Y; z = Z;
}
// vector ๊ฐ’
inline float point3::Mag () const
{
 return (flaot)sqrt (x*x + y*y + z*z);
}
// ๊ฑฐฆฌ˜  œ๊ณฑ ๊ฐ’
inline float point3::MagSquared () const
{
 return (x*x + y*y + z*z);
}
// Normalize
inline void point3::Normailze ()
{
 float foo = 1/Mag ();
 x *= foo; y *= foo; z *= foo;
}

3.3.4. ฒก„ฐ ™“ฑ

float‚˜ double ‚˜ƒ€‚ผˆ˜ žˆŠ” €™†Œˆ˜ ˜ •œ๊ณ„กœ ธ• vectorผฆฌ ™“ฑ•œ€ •„‹Œ€ฅผ ž˜ ฒ˜ฆฌ•˜€ •œ‹ค.

๊ทธž˜„œ, epsilon ( ฑ…—„œŠ” 0.001กœ  •˜)ผŠ” ๊ฒƒ„ ‘– ๊ทธ ฌธ œฅผ •๊ฒฐ•œ‹ค๊ณ  •œ‹ค.

~cpp 
// point3˜ “ฑ๊ฐ€ —ฐ‚ฐž
#define EPSILON 0.001
inline bool operator ==(point3 const &a, point3 const &b)
{
 if (fabs (a.x - b.x) < EPSILON)
 {
   if (fabs (a.y - b.y) < EPSILON)
   {
     if (fabs (a.z - b.z) < EPSILON)
     {
       return true;
     }
   }
 }
 return false;
}

3.3.5. ‚  & ™ 

~cpp 
// ‚ 
inline float operator *(point3 const &a, point3 const &b)
{
 return a.x*b.x + a.y*b.y + a.z*b.z;
}
// ™ 
inline point3 operator ^(point3 const &a, point3 const &b)
{
 return point3 ( (a.y*b.z - a.z*b.y), (a.z*b.x - a.x*b.z), (a.x*b.y - a.y*b.x) );
}
--; ๊ณ ฉ•™๊ต•Œ ฐฐ› ˜ ‚ ๊ณผ ™ . €๊ธˆ‹ˆ Šจ †Œฆฌธ€.. ใ…Žใ…Žใ…Ž ๊ทธƒ – Œ. --;

3.3.6. ฆฌ๊ณค

ฆฌ๊ณค€ ๊ฐœ˜ …Œ‘ฆฌฅผ ‘œ˜„•˜Š”ฐ ‚ฌšฉœ‹ค.

- http://www.gameschool.co.kr/cyberhtm/3dPolygon.htm - ฆฌ๊ณค— ๊€•œ page
~cpp 
template <class type>
struct polygon 
{
	int nElem; // number of elements in the polygon
	int maxElem;

	type *pList;

	polygon()
	{
		nElem = 0;
		maxElem = 0;
		pList = NULL;
	}

	polygon( int maxSize )
	{
		maxElem = maxSize;
		pList = new type[maxSize];
	}

	polygon( const polygon &in )
	{
		CloneData( in );
	}

	~polygon()
	{
		DestroyData();
	}

	void CloneData( const polygon &in )
	{
		if( !in.pList ) 
			return;

		pList = new type[in.maxElem];
		maxElem = in.maxElem;
		nElem = in.nElem;
		for( int i=0; i<in.nElem; i++ )
		{
			pList[i] = in.pList[i];
		}
	}

	void DestroyData( )
	{
		delete[] pList;
		pList = NULL;
	}

	polygon& operator=( const polygon<type> &in )
	{	
		if( &in != this )
		{
			DestroyData();

			CloneData( in );
		}
		
		return *this;
	}
};

3.3.7.

3D—„œ € 2D˜ „ ๊ณผ๊ฐ™‹ค.

„  •˜•˜Š” ‹
~cpp 
   ax + by + cz + d = 0
‚ผ›Œ <a, b, c>Š” ˜ •„ (•„ : ๊ทธ ‚˜ “   “ค— Œ€• ˆ˜งธ ฒก„ฐ), dŠ” —„œ › ๊นŒ€˜ ๊ฑฐฆฌ

œ„˜ ‹„ งŒกฑ•˜Š” “   ˜ ‚ผ›Œ <x, y, z>Š” ฐ”กœ — žฌ•˜Š” “   “ค‹ค

„  •˜•˜Š” ๊ตฌกฐ
~cpp 
struct plane3 {

	point3 n; // Normal of the plane
	float d;  // Distance along the normal to the origin 

	plane3( float nX, float nY, float nZ, float D) : n( nX, nY, nZ ), d( D )
	{
		// All done.
	}
	plane3( const point3& N, float D) : n( N ), d( D )
	{
		// All done.
	}

	// Construct a plane from three 3-D points
	plane3( const point3& a, const point3& b, const point3& c);

	// Construct a plane from a normal direction and a point on the plane
	plane3( const point3& norm, const point3& loc);

	// Construct a plane from a polygon
	plane3( const polygon<point3>& poly );

	plane3()
	{
		// Do nothing
	}

         // Flip the orientation of the plane
	void Flip();
};

3.3.8. €™˜

3D˜ œ„น˜™‚˜ šŒ „ “ฑ –‰ ฌกœ ฃจ– ง„‹คŠ” –˜๊ธฐ.

œ„น˜ ™•”•ฃผ๊ณ  นผฃผ ˜Š”๊ฑ ‹ค •„Š” ‚ฌ‹ค‹ˆ.. ฉ.. --; šŒ „‚˜ •Œ  ๊ฒƒ ๊ฐ™Œ.

...

šŒ „„ •Š” „ธ๊ฐ€€ ‘œ€ –‰ ฌ. (Euler šŒ „)
~cpp  
Rx (r) = | 1         0         0    |
         | 0       cos(r)    sin(r) |
         | 0       -sin(r)   cos(r) |

Ry (r) = | cos(r)    0       -sin(r)|
         | 0         1         0    |
         | 0       sin(r)    cos(r) |

Rz (r) = | cos(r)  sin(r)      0    |
         | -sin(r) cos(r)      0    |
         | 0         0         1    |

ex ) v0 = <2, 0, 0>„ z— ๊€• ‹œ๊ณ„ ฐฉ–ฅœผกœ 45„ šŒ „
      v1 = Rz(45)v0
     v1 v0ฅผ z— ๊€• ‹œ๊ณ„ ฐฉ–ฅœผกœ 45„ šŒ „‹œ‚จ € ‹ค.

// ฌธ œ 
// x, y, z•œผกœ šŒ „‹œ‚จ –‰ ฌ“ค„ •˜‚˜กœ ๊ฒฐ••˜๊ธฐœ„•œ ‘œ€ ฐฉ• —†‹ค. // ??
ผ ••œ šŒ „„ ฃผ๊ธฐœ„• •••  ผ€ ‹จ€ •„š”•œ  จ˜ €™˜„ •Œ•„‚๊ณ 

ธ˜ ๊ฐ  — “ค €™˜„  šฉ•˜Š” ๊ฒƒ‹ค.

~cpp 
- Šน ••œ   p— žฌ•˜Š” ๊ฐœฅผ z•„ ”ฐผ šŒ „‹œ‚ค คŠ” ๊ฒฝšฐ -
v = vT(-p)   // › œผกœ œ„น˜™
v = vRz(ŒŒ/2)  // ŒŒ.. ญ”€Š” •Œ๊ฒ €.. ใ…กใ…ก; 
v = vT(p)    // ‹ค‹œ  „ pกœ ™.
but, ๊ฐ “ค งˆ‹ค Ÿฐ —ฐ‚ฐ„ ˆ˜–‰•˜ ค „ˆ Šฆฌ‹ค.

๊ทธž˜„œ งธฐ, –‰ ฌ— žˆ–„œ ข‹€  € ๊ณฑ•˜๊ธฐ  „— ๊ทธ  “ค„ ๊ฒฐ••  ˆ˜ žˆ‹คŠ”  ‹ค.

‘ ๊ฐ€€ šŒ „, ฆ‰, A™€ Bฅผ ˆ˜–‰•••  ๊ฒฝšฐ ๊ฒฐ••™— ”ฐผ ‹คŒ๊ณผ๊ฐ™ •  ˆ˜ žˆ‹ค.

~cpp 
v` = (vA)B => v` = v(AB)    // ˜ค!~

3.3.9. •-๊ฐ„ šŒ „

Šจ †Œฆฌธ€...

•ž—„œณธ EuleršŒ „˜ ฌธ œ „ •ˆ•œ šŒ „–‰ ฌ.

~cpp 
 | xx(1-cos(r)) + cos (r)      yx(1-cos(r)) + z sin(r)     xz(1-cos(r)) - y sin(r)     0 |
 | xy(1-cos(r)) + z sin(r)     yy(1-cos(r)) + cos(r)       yz(1-cos(r)) - x sin(r)     0 |
 | xz(1-cos(r)) + y sin(r)     yz(1-cos(r)) + x sin(r)     zz(1-cos(r)) - cos(r)       0 |
 |          0                            0                            0                1 |

3.4. Chapter 4. ธ๊ณต €Šฅ (Artificail Intelligence)

3.4.1. ถœฐœ 

''
  • ––๊ฒŒ ๊ฐœฅผ ›€ง๊ณ , ––๊ฒŒ Œ๊ณ , ––๊ฒŒ ๊ฑทŠƒŠ” ›€งž„— ๊€•œฌธ œ (locomotion or motor skills)
  • ๊ฐœ๊ฐ€ ––๊ฒŒ žฅ• ฌผ ฐ ‹คฅธ ๊ฐœ“ค„ ”ผ•˜„œ A—„œ Bกœ ™•  ๊ฒƒธ๊ฐ€? (task generation)
  • ‹ค œ‚ฌ๊ณ , ๊ฐœ“ค —‡„ •  ๊ฒƒธ€ ŠคŠคกœ ๊ฒฐ ••˜๊ณ  ›€งŠ” Šฅ ฅ„ šฉ•˜ฉฐ •˜๊ณ ž •˜Š” ฐ”ฅผ –‰•  ๊ณ„š„ „ธšฐŠ”๊ฒƒ (acion steering)
''

3.4.2. กฐข… - about move 1

1.ถ” 

๊ฐ„‹จžˆ  „ ”ฐผ๊ฐ€Š” ๊ฒƒ. ญ •Œ๊ณ ฆฌฆ˜ ๊ฐ™€๊ฑ žˆ€„ •Š„๊ฒƒ ๊ฐ™‹ค.

2.ƒˆถœ

... • ง —†Œ.

3.Œจ„ (๊ธฐณธ)

... • ง —†Œ.

3.4.3. กฐข… - 2

 „œ„ •ˆ˜
šฐฆฌŠ” …ฒฝ•˜๊ฒŒ žฅ• ฌผ 2‹คŠ” žฅ• ฌผ 1„ ”ผ•˜๊ธฐฅผ ” ›•  ๊ฒƒ‹ค.

ฆ‰, žฅ• ฌผ 2Š” ›จ”ฌ ” €ฆฌ –จ– ธ žˆ๊ธฐ •Œฌธ‹ค.

~cpp 
            --------------
            | obstacle 2 |                        | goal |
            --------------

             



       --------------
       | obstacle 1 |
       --------------

    |creature.|
šฐฆฌŠ”  „œˆ „ •˜‚˜˜ “ฑ‹œผกœ ฐ”๊ฟ€ ˆ˜ žˆ‹ค. ตœˆ šฐฆฌ˜ ฐฉ–ฅ€

‘œ € „ –ฅ•œ ‰๊ท ™”œ ฒก„ฐ‹ค(or ‘œ € ˜ œ„น˜—„œ ˜„žฌ œ„น˜ฅผ € ๊ฒƒ)

๊ทธฆฌ๊ณ , ๊ฐ๊ฐ˜ žฅ• ฌผ— Œ€• ๊ณงžฅ „ง๊ฐˆ ˆ˜ žˆ„ก •˜Š” ‰๊ท  ฒก„ฐฅผ ฐพ•„‚ธ‹ค.

 ‰๊ท  ฒก„ฐฅผ •˜‚˜˜ ƒˆ˜กœ ๊ณฑ•œ ‹คŒ ‹ค‹œ žฅ• ฌผกœ€„ฐ˜ ๊ฑฐฆฌ˜

 œ๊ณฑœผกœ ‚˜ˆ„‹ค. ๊ทธฆฌ๊ณ  ‚˜„œŠ” ฌผ๊ฐ€ ฐฉ–ฅ ฒก„ฐกœ„œ šฉ••  •˜‚˜˜ ฒก„ฐฅผ –Š”‹ค.

...   . ญ”†Œฆฐ€. ‚˜Š” •Œ€~ ^^

๊ณต‹]

http://zp.cse.cau.ac.kr/~erunc0/study/d3d/potential.bmp
~cpp 
// ‹ค œ ‚ฌšฉ ˜ˆ.
bool Process()
{
	point3 goalVec = g_goalLoc - m_loc;

	if( goalVec.Mag() < g_creatureSpeed )
		return false; // goal๊นŒ€ „ฐฉ–ˆ‹ค.

	point3 dirVec = goalVec / goalVec.Mag();

	float k = .1f; 

	// ๊ฐ๊ฐ˜ obstacle๊ณผ ๊ฒ€‚ฌ
	for( int i=0; i<g_obstacles.size(); i++ )
	{
		// creature—„œ obstacle๊นŒ€˜ vector
		point3 obstacleVec = m_loc - g_obstacles[i].m_loc;

		// obstacle๊ณผ creature‚ฌ˜ ‹ค œ ๊ฑฐฆฌ
		float dist = obstacleVec.Mag() - g_obstacles[i].m_rad - m_rad;

		// this is the vector pointing away from the obstacle ??
		obstacleVec.Normalize(); 

		dirVec += obstacleVec * ( k / (dist * dist) ); // creatureฅผ ‰–‰™ ‹œ‚ฌ –‰ ฌ„ –Š”‹ค. “  obstacle„ ๊ฒ€‚ฌ •˜„œ...
	}
	dirVec.Normalize();

	m_loc += g_creatureSpeed * dirVec;
	return true; // ok. obstacle„ ”ผ–ˆ‹ค.
}
‹ค–‰ ŒŒผ: http://zp.cse.cau.ac.kr/~erunc0/study/d3d/potentialFunc.exe


žฅ 

  • •™˜ ๊ฒฝšฐ™€ ๊ฐ™€ ฌผฆฌ  žฅ• ฌผ “œฌธ ๊ฒฝšฐ—Š” ž˜œ‹ค.
  • žฅ• ฌผ“ค ŠคŠคกœ ›€งผ ˆ˜„ žˆ‹คŠ” ๊ฒƒ.
‹จ 

  • žฅ• ฌผ“ค „ˆ ๊ฐ€๊นŒ €ง‘•„œ ™– žˆ‹ค ๊ทธ๊ฒƒ„ น  ธ ‚˜˜ฌˆ˜ —†‹ค.

3.4.4. ๊ฒฝกœ ถ” 

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:04
Processing time 0.0373 sec