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.0398 sec