반응형
http://www.gpgstudy.com/forum/viewtopic.php?p=7836




D3DXVec3TransformCoord은 뭔가요? 

 
잠김[?]   GpgStudy 게시판 인덱스 -> 그래픽 프로그래밍
이전 주제 보기 :: 다음 주제 보기  
글쓴이메시지
imays



가입: 2003년 2월 18일
올린 글: 1043

올리기D3DXVec3TransformCoord은 뭔가요?올려짐: 2003-07-19 16:00
인용과 함께 답변 이 게시물을 del.icio.us에 추가

D3DXVec3Transform과 달리 w=1로 해준다는데, 이게 무슨 의미인가요?
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문 MSN 메신저
maxidea
손님





올리기Re: D3DXVec3TransformCoord은 뭔가요?올려짐: 2003-07-30 04:52
인용과 함께 답변 이 게시물을 del.icio.us에 추가

D3DXVec3Transform과 D3DXVec3TransformCoord의 첫번째 인자를 보면 해답이 나옵니다. 

D3DXVec3Transform의 첫번째 인자는 "D3DXVECTOR4* pOut" 입니다. 
즉, x,y,z를 w로 나누지 않고 w값을 따로 구하는거죠. 

반면에, D3DXVec3TransformCoord의 첫번째 인자는 "D3DXVECTOR3* pOut" 입니다. 
x,y,z밖에 담지 못하는 구조체를 상속받은 클래스입니다. 

결국, D3DXVec3TransformCoord를 쓰면 x, y, z를 바로 구할 수 있고,(w=1이라고 가정했으므로) 
반면, D3DXVec3Transform를 쓰게되면 x=x/w, y=y/w, z=z/w로 계산해야(w=1 or w != 1) 
x, y, z를 구할 수 있다는건데, w=1이면 두개함수 모두 같은 결과가 되겠네요. 
반대로 w가 1이 아닐때는 결과가 틀려지겠죠. 

그런 연유로 "D3DXVec3TransformCoord" 설명부분에 "그 결과를 w=1 에 투영 한다" 라고 써있는거 
같습니다.(말이 대단히 함축적인듯...) 

* 두개의 함수를 한번 만들어 보시면 바로 해답이 되겠네요.(가장 기본이니 한번 해보시는것도...) 


그냥 한번 주저리주저리 했습니다.
위로
maxidea
손님





올리기Re: D3DXVec3TransformCoord은 뭔가요?올려짐: 2003-07-30 04:59
인용과 함께 답변 이 게시물을 del.icio.us에 추가

생각없이 쓰다보니 이상한것 같아서 쩝. 새벽5시다 보니 머리가 어떻게 된건지... 어... 

"그 결과를 w=1 에 투영 한다" 란 말은 구해진 w값으로 x, y, z로 나누었다는 얘기와 
같습니다. 즉 x/w, y/w, z/w = x, y, z가 되려면 w=1인 상태가 되어야 겠죠. 
이말을 "w=1에 투영한다" 라고 설명하였나 봅니다. 

이렇게 쓰나 저렇게 쓰나 다 이상한것 같네요. 우... 죄송...(잠을좀 자야겠네요.)
위로
imays



가입: 2003년 2월 18일
올린 글: 1043

올리기추가 질문!올려짐: 2003-07-30 17:20
인용과 함께 답변 이 게시물을 del.icio.us에 추가

답변 감사합니다. 
그런데... D3DXVec3TransformCoord는 뭐하는데 쓰는건가요?
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문 MSN 메신저
zizisky



가입: 2002년 8월 28일
올린 글: 11
소속: Netmarble

올리기올려짐: 2003-07-30 19:08
인용과 함께 답변 이 게시물을 del.icio.us에 추가

이렇게 설명하는게 맞는지는 모르겠지만 나름대로 정리해봅니다. 

원래 3개의 원소로 구성된 벡터와 4X4 행렬을 곱하는것은 이론상으로도 맞지 않습니다. 
하나는 원소가 3개고 다른 하나는 원소가 4개니 곱한다는것 자체가 성립되지가 않죠. 
그래서 w라는 값을 가져서 4개의 원소로 만들어서 곱한후 그 결과를 w로 나누어주게 됩니다. 
왜 w를 나누어주냐에 대해서는 프로젝션을 떠올려보심 되겠네요. 
4번째 값인 w 없이는 프로젝션이 수행되지가 않습니다. 
프로젝션이라는건 어찌보면 공간 왜곡이죠... 가까이있는것은 확대하고 멀리있는 것은 축소합니다. 
그래서 가까이있는 물체는 크게보이게되고 멀리있는 물체는 작아져서 한점에 모이도록 보이게 됩니다. 
이러한 결과는 w로 나눠줄때 발생하는거죠... 
w로 나누지 않는 경우는 그냥 평면도처럼 공간의 왜곡이 없이 멀리 있으나 가까이 있으나 같은 크기로 보입니다. 

즉 D3DXVec3TransformCoord() 함수는 벡터의 3요소를 동차좌표인 w값으로 나누어서 최종적으로 화면상에 표시될 공간의 좌표를 얻는 연산을 수행합니다. 
곱하는 행렬에 w를 좌우하는 요소(즉, 4열의 요소)가 없다면 D3DXVec3Transform()함수를 써도 결과는 같습니다. 
보통 프로젝션 매트릭스를 설정할때 자세히 보시면 3행 4열에 특수한 값이 들어갑니다. 
3행 4열의 요소는 곱하기 연산후에 z값에 영향을 받아서 w가 다른 요소들을 왜곡시키도록 변하게됩니다. 
즉, 연산후 w로 나누는것은 공간을 왜곡시키고 w는 결국 z값에 따라서 변하는것임을 직접 곱해보시면 알게될겁니다.
위로
사용자 정보 보기 쪽지 보내기
maxidea
손님





올리기올려짐: 2003-07-30 19:12
인용과 함께 답변 이 게시물을 del.icio.us에 추가

구지 w를 구하지 않고, 좌표(x,y,z)만 transform하겠다할때 쓰겠죠.
위로

반응형

+ Recent posts