조회 수 1192 추천 수 3 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

안녕하세요. 제프입니다. 오랜만에 글을 적는것 같네요. ^^;;


 


오늘은 코드 분석을 하는 것이 아니라, 지난번에 알려드렸던 3대 행렬 변환에 대한 유의사항을 적어보겠습니다.


 


지난번에 알려드린 부분 Render 함수를 이용하여 여러가지 변환(이동,회전,크기변환)을 해보셨다면, 이런 문제를 접하셨을수 있을 것입니다.


 


문제의 코드를 약간만 적어보도록 하겠습니다.


 


 


------------------------------------------------------


 


D3DXMATRIX move;


D3DXMatrixTranslation(&move, 1.0, 0.0, 0.0); //x축 방향으로 1만큼 이동


 


D3DXMATRIX rotate;


D3DXMatrixRotationZ(&rotate, (((float)timeGetTime()*D3DX_PI*2.0)/1000.0)); // 시간에 따라 Z축 기준으로 1초에 1바퀴 회전함.


 


D3DXMATRIX local;


 


// local = move * rotate; //1번의 경우


// local = rotate * move; //2번의 경우


 


// 이하 local 행렬을 기준으로 그림을 그림


 


/*


TIP.


 


가장 헷갈리실 수 있는 (((float)timeGetTime()*D3DX_PI*2.0)/1000.0) 부분은


 


timeGetTime() 함수는 시간을 1/1000 초 단위로 알려주는 함수입니다.


 


이것을 1000으로 나누면 초단위가 되고, 2*D3DX_PI로 곱해주면 1바퀴에 해당하는 라디안값으로 변환됩니다.


 


즉 1초에 1바퀴를 표현하는 라디안 값을 구하라는 표시이지요.


*/


 


 


-------------------------------------------------------


 


 


 


 


 


 


중요한 내용은 이 다음에 주석처리한 2가지 경우입니다.


 


1번의 경우 move * rotate를 시행하였습니다만, 이경우 다음 그림을 그릴 대상을 이동->회전을 가하는 경우입니다.


 


이것은 원점기준으로 시행되는 연산이기 때문에,


 


먼저 X축방향으로 1만큼 이동을 한후 회전을 합니다.


 


 


 


      |                                  |


      |                                  |


      |                                  |■


      |                                  |   ↖


     □->■---------               ---□----------


  - 대상이 이동한 모습 - - 회전 명령을 시행한 모습 -


 


 


정점을 기준으로 회전행렬이 적용되어 이동한 거리를 기준으로 원운동을 하는 모습이 될것입니다.


 


 


 


2번의 경우는 회전이 먼저 시행되는 경우이므로 다음과 같습니다. (그리기가 쉽네요. ^^;)


 


      |                                  |


      |                                  |


      |                                  |


      |                                  |


      ◆------------               -->◆----------


  - 대상이 회전한 모습 - - 이동 명령을 시행한 모습 -


 


사각형이 회전을 먼저한후, 이동을 취한 상태입니다.


 


두가지의 모습이 어떻게 달라지는지 아셨겠지요?


 


 


 


이런 간단한 오류들을 확실히 인지하고 전체적으로 실수가 발생하지 않도록 하는것이 중요하겠습니다. ^^;

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
864 RPG Maker [RXP]윈도우 만들기 4탄-스페셜 윈도우(커맨드) 『연금술사』 2006.05.05 456
863 언어/기타 기준을 하나만 두고 괴인X 2006.01.21 461
862 언어/기타 바이올린 강좌 1편 다크엔젤94 2005.11.22 463
861 언어/기타 간단한 총싸움 만들어 볼까 ? - 다크™의 강좌 - 다크세이버™ 2005.07.30 464
860 언어/기타 자료구조 (3) - 링크리스트 성령의분노 2006.03.24 465
859 언어/기타 사운드 용량을 줄여보자! file 다크아머 2006.01.05 466
858 RPG Maker RPG2003의맵만들기에서 제일 중요한 기능 혼돈의하늘32 2005.07.21 467
857 언어/기타 스위치마스터 下편 『덩키동크』 2006.07.27 467
856 언어/기타 비트 연산자 dnajs 2006.10.05 471
855 언어/기타 무자게 허접한 아이디어 지옥의마검사 2005.11.13 471
854 언어/기타 맵 트리 데이타가 깨졌을 때 복구하기!!! 다크세이버™ 2006.05.30 472
853 언어/기타 [Orchestral Instrumentation] 1. 오케스트라 개론 PianoForte 2005.10.06 472
852 언어/기타 플레이어의 질서 의식 고취! EverSmileMan 2006.05.18 473
851 언어/기타 아이디어라기보다는 팁 Ress 2006.02.28 474
850 RPG Maker [RMXP] 벽 소환 이벤트를 만들자 file 연필군 2007.01.06 476
849 언어/기타 초보가..]겜블주머니 만들기 잃어버린98 2005.10.26 476
848 언어/기타 댓글을 다시는 분이 3분 더 생겼다. 아란 2006.08.08 477
847 언어/기타 조건분기:***번호의 스위치가 ON CC(虎) 2006.01.07 477
846 언어/기타 1. DirectX 8.0 sdk 해보기. file 케이코냥이 2006.08.26 478
845 언어/기타 게임을 상상형식으로 만들자. 히어로RPG 2006.03.31 479
Board Pagination Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 51 Next
/ 51






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)