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