๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ–ผ GameProgramming 2D

๊ณ„์ธต ๊ตฌ์กฐ

by eazuooz 2023. 2. 7.

์˜ˆ์ œ :)

https://github.com/eazuooz/YamYamEngine/commit/89bee1b4401ce4ca8d129cb82cbb1294f0cd26bc

 

Hirearchy Transform · eazuooz/YamYamEngine@89bee1b

Show file tree Showing 5 changed files with 45 additions and 35 deletions.

github.com

๋ถ€๋ชจ-๋ณ€ํ™˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ถ€๋ชจ๋ผ๋Š” ๊ฐœ๋…์€ ํ•œ ์˜ค๋ธŒ์ ํŠธ(์ž์‹)๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ(๋ถ€๋ชจ)์— ๋ถ™์–ด ์žˆ๊ณ  ๋‹ค๋ฅธ ์˜ค๋ธŒ์ ํŠธ์˜ ์›€์ง์ž„์„ ๋”ฐ๋ฅด๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐœ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐœ์ฒด์˜ ์ž์‹์œผ๋กœ ์„ค์ •๋˜๋ฉด ๋ถ€๋ชจ์˜ ์œ„์น˜, ํšŒ์ „ ๋ฐ ๋ฐฐ์œจ์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ถ€๋ชจ ๊ฐœ์ฒด์— ์ ์šฉ๋œ ๋ชจ๋“  ๋ณ€ํ˜•์ด ์ž์‹ ๊ฐœ์ฒด์—๋„ ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ๋ณต์žกํ•œ ์›€์ง์ž„๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒŒ์ž„ ๋‚ด ์บ๋ฆญํ„ฐ๊ฐ€ ํŒ”, ๋‹ค๋ฆฌ, ๋ชธํ†ต ๋“ฑ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ถ€๋ถ„์„ ์บ๋ฆญํ„ฐ์˜ ๋ฉ”์ธ ๋ฐ”๋”” ์˜ค๋ธŒ์ ํŠธ์— ๋ถ€๋ชจ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ชธ์ฒด ์˜ค๋ธŒ์ ํŠธ๋งŒ ์›€์ง์ด๋ฉด ์ž์‹ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๋”ฐ๋ผ ์›€์ง์ด๊ธฐ ๋•Œ๋ฌธ์— ์บ๋ฆญํ„ฐ์˜ ์›€์ง์ž„์„ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ถ€๋ชจ-๋ณ€ํ™˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ธŒ์ ํŠธ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ ๋ถ€๋ชจ-๋ณ€ํ™˜ ์•„ํ‚คํ…์ฒ˜๋Š” ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ๊ฒŒ์ž„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํšจ์œจ์ ์ด๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋ณธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

	void Transform::FixedUpdate()
	{
		mWorld = Matrix::Identity;

		Matrix scale;
		scale = Matrix::CreateScale(mScale);

		Matrix rotation;
		rotation = Matrix::CreateRotationX(mRotation.x);
		rotation *= Matrix::CreateRotationY(mRotation.y);
		rotation *= Matrix::CreateRotationZ(mRotation.z);

		Matrix position;
		position.Translation(mPosition);

		mWorld = scale * rotation * position;

		// ๊ธฐ์ €๋ฒกํ„ฐ ๊ตฌํ•˜๊ธฐ
		mUp = Vector3::TransformNormal(Vector3::Up, rotation);
		mFoward = Vector3::TransformNormal(Vector3::Forward, rotation);
		mRight = Vector3::TransformNormal(Vector3::Right, rotation);

		if (mParent)
		{
			mWorld *= mParent->mWorld;
		}
	}

๋Œ“๊ธ€