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