거리에 관계없이 일정한 크기 모델은 어떻게 하나요?

반응형
3d물체를 카메라의 위치와 상관없이 일정하게 그려야 할 일이 생겼다.
카메라와의 거리에 의해 크기가 줄어드는데 그 줄어드는 정도를 사용자가 조절할 수 있어야 하고
특정한 거리만큼 멀어지면 더이상 줄어들면 안된다.

출처 : gpg

http://www.gpgstudy.com/forum/viewtopic.php?t=21575&highlight=%B0%ED%C1%A4+%C5%A9%B1%E2

 

 

 

GpgStudy 게시판 인덱스 GpgStudy 홈으로

이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
copycd



가입: 2005년 5월 3일
올린 글: 23

올리기거리에 관계없이 일정한 크기 모델은 어떻게 하나요? 올려짐: 2008-11-27 15:46
인용과 함께 답변 이 게시물을 del.icio.us에 추가

지형위에, 모델로 심볼들을 올렸는데.

하늘 높이 올라가면, 심볼들이 작아서 안보입니다.

하늘로 가나, 지형밑으로 내려오나,

일정한 크기를 유지하게 하고 싶은데.
( 비율값을 계산해서 , 메쉬의 world에 배율을 곱해준다거나 )

어떤 식으로, 그 일정한 비율값을 구할 수 있나요?


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

이와 비슷하 질문인데.
텍스쳐의 픽셀이 2D 프로그램처럼, 1:1로 매칭되는 그런 시점을 알 수 있나요?
즉, 2D 프로그램에서 텍스쳐는 픽셀이 1:1로 화면에 매칭이 되는데.
3D 폴리곤의 텍스쳐가 그렇게 보이는 거리를 계산 할 수 있냐는 겁니다.
위로
사용자 정보 보기 쪽지 보내기 이메일 보내기
neogeo



가입: 2008년 8월 15일
올린 글: 130
소속: DMP


타 사이트 ID(?):
neogeo
올리기Re: 거리에 관계없이 일정한 크기 모델은 어떻게 하나요? 올려짐: 2008-11-27 17:09
인용과 함께 답변 이 게시물을 del.icio.us에 추가

copycd 씀:
지형위에, 모델로 심볼들을 올렸는데.

하늘 높이 올라가면, 심볼들이 작아서 안보입니다.

하늘로 가나, 지형밑으로 내려오나,

일정한 크기를 유지하게 하고 싶은데.
( 비율값을 계산해서 , 메쉬의 world에 배율을 곱해준다거나 )

어떤 식으로, 그 일정한 비율값을 구할 수 있나요?


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

이와 비슷하 질문인데.
텍스쳐의 픽셀이 2D 프로그램처럼, 1:1로 매칭되는 그런 시점을 알 수 있나요?
즉, 2D 프로그램에서 텍스쳐는 픽셀이 1:1로 화면에 매칭이 되는데.
3D 폴리곤의 텍스쳐가 그렇게 보이는 거리를 계산 할 수 있냐는 겁니다.


어떤 물체를 그릴때 projection matrix 를 perspective 가 아닌 orthographic 으로 세팅하시고 그려주시면 간단하게 해결됩니다. ( 즉 크기가 일정하게 그리고 싶은 물체를 그리는 순간만 projection matrix 를 바꿔주시면 됩니다. ) 하는 방법은 구글링해보시거나 기초 3D math 책을 보시면 어디나 나와있습니다.

이런게 불가능한 상황이거나 너무 복잡한 상황의 경우는 projection matrix 를 얻어내신뒤, 이의 역행렬을 구하셔야 카메라 기준으로 물체의 깊이에 따른 scale 값을 정확하게 구해서 곱해주는 방법을 이용하실 수 있습니다.

아랫질문도 orthographic 하게 rendering 하시면 화면 왼쪽끝에서 오른쪽 끝까지의 값을 정확하게 채우는 사각형을 매우 쉽게 그리실 수 있습니다. ( 카메라의 거리와 관계가 없어지니까요. ) 다만 카메라기준의 깊이값에 따라 그려지는 물체가 z-testing 중이라면 가까운것만 그려지고 나머지는 가려지겠지요. alpha 가 있다면 또 이야기는 달라지겠지만...
_________________
neogeo - The Future is Now.
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문
비회원
손님





올리기Orthogonal 을 사용하면 - 올려짐: 2008-11-27 17:20
인용과 함께 답변 이 게시물을 del.icio.us에 추가

인용:
어떤 물체를 그릴때 projection matrix 를 perspective 가 아닌 orthographic 으로 세팅하시고 그려주시면 간단하게 해결됩니다. ( 즉 크기가 일정하게 그리고 싶은 물체를 그리는 순간만 projection matrix 를 바꿔주시면 됩니다. ) 하는 방법은 구글링해보시거나 기초 3D math 책을 보시면 어디나 나와있습니다.


Projection 행렬을 바꾸면 깊이 테스트에서 문제가 생길듯 합니다.

깊이 테스트(Z-Test)까지 고려하신다면 Fov 값을 얻어서 거리에 따른 비율을 곱해주시거나, 역행렬 등을 이용해서 그리는 방법을 쓰도록 하시고 깊이 테스트가 필요 없다면 위의 방법도 괜찮은 방법입니다.
위로
neogeo



가입: 2008년 8월 15일
올린 글: 130
소속: DMP


타 사이트 ID(?):
neogeo
올리기Re: Orthogonal 을 사용하면 - 올려짐: 2008-11-27 18:11
인용과 함께 답변 이 게시물을 del.icio.us에 추가

비회원 씀:
인용:
어떤 물체를 그릴때 projection matrix 를 perspective 가 아닌 orthographic 으로 세팅하시고 그려주시면 간단하게 해결됩니다. ( 즉 크기가 일정하게 그리고 싶은 물체를 그리는 순간만 projection matrix 를 바꿔주시면 됩니다. ) 하는 방법은 구글링해보시거나 기초 3D math 책을 보시면 어디나 나와있습니다.


Projection 행렬을 바꾸면 깊이 테스트에서 문제가 생길듯 합니다.

깊이 테스트(Z-Test)까지 고려하신다면 Fov 값을 얻어서 거리에 따른 비율을 곱해주시거나, 역행렬 등을 이용해서 그리는 방법을 쓰도록 하시고 깊이 테스트가 필요 없다면 위의 방법도 괜찮은 방법입니다.


orthographic projection 도 Z-TEST 는 정상적으로 동작할 것 같습니다만.... 깊이 테스트에서 문제가 생길거라는 이유를 한참 생각해봐도 잘 모르겠습니다. 뭔가 시야로 보기엔 이상한 물체가 좀 생길 가능성은 있어도 ( 특히 orthographic 으로 그린 물체보다 앞에 perspective 로 그려질 물체 라던가, 서로 다른 방식으로 그려진 물체는 당연히 부피가 어느정도 크고 카메라 기준 Z 깊이 쪽으로 길게 그려질 수록 위화감을 주겠지요. ) 그것 자체가 원래 그렇게 그리고자 했던 것을 의도하므로 Z-TEST 에 특별히 영향을 주지는 않을 것 같습니다. ( 카메라 기준 깊이가 Z 라면, 어차피 그려지는 물체의 카메라 world 기준의 Z 값은 어떤 projection 이라도 전혀 scale 되지 않는 것 아닌가요? )
_________________
neogeo - The Future is Now.
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문
TomatoWAX



가입: 2005년 1월 17일
올린 글: 454
소속: 토마토 농장

올리기Re: Orthogonal 을 사용하면 - 올려짐: 2008-11-27 20:29
인용과 함께 답변 이 게시물을 del.icio.us에 추가

neogeo 씀:
카메라 기준 깊이가 Z 라면, 어차피 그려지는 물체의 카메라 world 기준의 Z 값은 어떤 projection 이라도 전혀 scale 되지 않는 것 아닌가요?


읔, 열심히 적다가 모르고 창을 새로고침해버렸군요ㅜㅜ
음.. 사실 몇번씩 계속 적었다 지웠다가 다시 또 나중에 보고 적었다 지웠다를 반복중입니다.

조금 조심스러운 주제이기에 그런데요...

일단 neogeo 님의 마지막 발언은 조금 오해를 불러일으킬 요지가 있기에 정정하겠습니다.

어떤 Projection 이라도 z 값을 변경시킬 수 있습니다.
두 가지 요인에 의해 변경합니다.

- Projection 생성시 넘기는 near 와 far
- Projection 행렬 구현의 변경 (scale 만 조절 가능)

어느것도 달라지지 않은 Projection 이라면 당연히 동일한 결과가 나오겠지만 Projection 행렬의 구현에 따라 z 값은 scale 되어 저장됩니다.

일반적으로 near 는 최소 표현 거리, far 는 최대 표현 거리- 라고 설명되긴 합니다만...
단순히 '가시화 할 수 있는 거리' 로써의 의미만 지니는 것이 아니라 실제로 z 값의 '분포'를 scale 하여 저장합니다.

최종적으로 연산되어 저장되는 정규화 변환에서의 z 값의 min/max 범위는 동일할 수 있겠습니다.
(물론 이 역시 Projection 행렬의 구현에 따라 변경 가능합니다.)

하지만 그렇다고 동일한 z 값이 정규화 되었을 때 항상 Projection 과 상관없이 동일한 z 값을 갖지는 않습니다. 이것의 분포- (라는 단어가 조금 혼용될 수 있겠는데... 범위, 분포, 크기- 다 같은 의미입니다.) 는 적용하는 Projection 에 따라 달라집니다. 이것에 대해 오해가 생기지 않도록 정정합니다.

이제 다시 원 질문자의 주제로 돌아오겠습니다. 저는 사실 neogeo 님의 첫 답변을 보고 회의감을 느꼈습니다. 과연 동일한 카메라의 설정에서 (물론 명시하시진 않으셨지만 문맥상 유추, 죄송합니다^^; ) 프로젝션의 변경만으로 해결될 수 있을것인가- 말이죠.

일단 제 의견은 이렇습니다.

- 3D 공간의 좌표를 2D 좌표로 투영
- 계산한 2D 좌표를 이용하여 다시 화면에 투사

음.. 일반적인 HP Bar 나 아이디를 표시할 경우 사용되는 방법입니다.
3D 모델의 표현일지라도 원하는 목적이 '심볼'의 경우라면 동일하게 적용되어야 한다고 생각합니다만...

관련 서적도 찾아보고 여러번 테스트도 직접 해보았는데 Projection 의 변경만으로는 사실 단순히 해결되지 못하고 결국 '비례 값' 이 필요하게 됩니다. 이것은 결국 해당 모델을 그냥 적당한 수치를 주어서 비례해주는 것과 비슷한 정확도를 가지지 않을까 싶습니다..

물론 제가 말한 방법에서도 제한점은 있기 때문에 제한된 상황에서만 적용해야 하나.. (추가로 Z 값의 청소가 필요하다던가) 단순히 '심볼'이 목적이라면 무난하게 가능하지 않나 싶습니다.

간단할 것 같지만서도 3D 모델이기에 상당히 흥미롭게 모니터링 중입니다만... 다른 의견이나 제 답변에서 틀린점의 지적을 부탁드리겠습니다.^^ (사실 더 많이 Test 해보고 답변을 적으려고 했는데 시간 관계상 많이 Test 해보지 못했습니다... 조금 더 검증이 필요한 부분이기에 질문자님께서도 직접 현장에 적용해보시고 최적의 솔루션을 선택하시는게 좋겠습니다.)
_________________
토마토 한창 잘 익는 중
http://www.TomatoWAX.com


게임데브넛 - 게임 개발자 모임
http://www.GameDevNut.net


TomatoWAX 가 2008-11-27 20:35에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 쪽지 보내기 이메일 보내기 글 올린이의 웹사이트 방문 AIM 주소 Yahoo 메신저 MSN 메신저
TomatoWAX



가입: 2005년 1월 17일
올린 글: 454
소속: 토마토 농장

올리기아 추가로, 올려짐: 2008-11-27 20:32
인용과 함께 답변 이 게시물을 del.icio.us에 추가

어떤 Projection 이던지 Z-Test 는 '제대로' 적용됩니다.

다만 우리가 집중해야 할 점은, Z 비교를 하는 Z 값은 카메라에서 바라본 실제 모델까지의 거리가 아니라 모델에 적용된 Projection 에 의해 값이 변화된 Z 값이라는 것이겠지요. (정규화 후의 이야기)

이것에 따라 서로 다른 Projection 에 의해서 Z 값 비교 현상이 잘못되어 보일 수 있습니다.
_________________
토마토 한창 잘 익는 중
http://www.TomatoWAX.com


게임데브넛 - 게임 개발자 모임
http://www.GameDevNut.net
위로
사용자 정보 보기 쪽지 보내기 이메일 보내기 글 올린이의 웹사이트 방문 AIM 주소 Yahoo 메신저 MSN 메신저
neogeo



가입: 2008년 8월 15일
올린 글: 130
소속: DMP


타 사이트 ID(?):
neogeo
올리기Re: Orthogonal 을 사용하면 - 올려짐: 2008-11-28 00:11
인용과 함께 답변 이 게시물을 del.icio.us에 추가

TomatoWAX 씀:
neogeo 씀:
카메라 기준 깊이가 Z 라면, 어차피 그려지는 물체의 카메라 world 기준의 Z 값은 어떤 projection 이라도 전혀 scale 되지 않는 것 아닌가요?


- Projection 생성시 넘기는 near 와 far
- Projection 행렬 구현의 변경 (scale 만 조절 가능)



제가 생각해보니 말을 매우 애매하게 썼군요.

일단 두 카메라의 기본적인 모델은 같고 ( 즉 near 와 far plane 위치는 같게 두고 ) projection model 을 perfective 냐 orthographic 하게 쓰느냐의 차이만 두고 두가지 projection의 경우에 대해 어떤 proejction 이라도( 둘중 어느쪽이라도 ) 카메라 기준 Z-scale 이 되지 않는다는 의미였습니다. ( 임의의 모든 projection 이라고 써버린게 되었군요 죄송합니다. )

사실상 orthographic 한 projection 의 경우는 물체 자체가 아무리 멀리 있어도 어차피 scale 이 전혀 되지 않기 때문에 항상 일정한 크기를 보장해 줄 수 있는 성질이 있고, Z-test 역시 섞여있더라도 일부 이상한 모양을 빼고는 제대로 그려질 것이라고 생각해서 추천했는데 아무래도 문제가 있을것 같습니다.

문제는 orthographic 한 projection 에서 그려지지 않는 물체가 proejction model 에서는 그려질 확률이 카메라에서 멀면 멀수록 높아진다는 단점이 있겠습니다. 단순히 카메라가 보는 방향에 직선상의 물체가 아니라면 아예 그려지지 않을 확률이 크겠네요.

차라리 더 쉬운 방법은 카메라 node 의 child 같은 개념으로 카메라의 tansformation 을 적용해 주는게 좋겠네요. 즉 카메라 자체를 parent 로 두고 카메라와의 거리가 항상 일정하도록 매 프레임마다 카메라 기준으로 좌표가 고정되게 하면 될 것 같습니다. 단 이 물체를 그릴땐 항상 다른 물체보다 적당히 먼 거리를 유지하도록 해야하므로 되도록 큰 물체를 아주 멀리에 놓은것으로 고정하는게 편리하겠습니다. ( 예를 들어 카메라의 far - plane 에 아슬아슬하게 닿는 거리 정도가 무난하겠죠 )
_________________
neogeo - The Future is Now.
위로
사용자 정보 보기 쪽지 보내기 글 올린이의 웹사이트 방문
airshark



가입: 2006년 7월 16일
올린 글: 197

올리기Re: 거리에 관계없이 일정한 크기 모델은 어떻게 하나요? 올려짐: 2008-11-28 00:55
인용과 함께 답변 이 게시물을 del.icio.us에 추가

copycd 씀:
지형위에, 모델로 심볼들을 올렸는데.

하늘 높이 올라가면, 심볼들이 작아서 안보입니다.

하늘로 가나, 지형밑으로 내려오나,

일정한 크기를 유지하게 하고 싶은데.
( 비율값을 계산해서 , 메쉬의 world에 배율을 곱해준다거나 )

어떤 식으로, 그 일정한 비율값을 구할 수 있나요?


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

이와 비슷하 질문인데.
텍스쳐의 픽셀이 2D 프로그램처럼, 1:1로 매칭되는 그런 시점을 알 수 있나요?
즉, 2D 프로그램에서 텍스쳐는 픽셀이 1:1로 화면에 매칭이 되는데.
3D 폴리곤의 텍스쳐가 그렇게 보이는 거리를 계산 할 수 있냐는 겁니다.


저같으면 3d Layer를 사용하겠습니다.

GUI 를 그냥 간단하게 3D 렌더링 하는 레이어를 하나만듭니다.

방법은 그 아이콘이 위치하게 되는 3D 위치를 지정합니다.

실제로 이 위치에 렌더링 하는 것은 아닙니다.

그리고 카메라 프러스텀의 FAR를 제외한 다른 면 안에 있을 때, 그냥 3D 위치를 2D로 변환합니다. 그러면 2D상의 3D 물체가 위치해야하는 지점이 생기죠.

이 때 렌더 텍스쳐를 사용해서 카메라와 모델간의 일정한 거리로 찍어둔 텍스쳐를 그 위치에 렌더합니다. 그러면 항상 같은 크기에 모델이 렌더가 됩니다.

단, 애니메이션 되는 모델이거나 각도에 의한 모델의 모양이 필수적으로 필요한(캐릭터,지형오브젝트)등은 계속 렌더링 텍스쳐를 다시 그려주는 것이 필요합니다.

질문자의 말처럼 아이콘 형태의 모델이라면 한번만 그려도 됩니다.
_________________
안녕하세요 삽질 전문 Airshark입니다.
위로
사용자 정보 보기 쪽지 보내기 MSN 메신저
zupet



가입: 2003년 5월 13일
올린 글: 2760
소속: EA Seoul Studio

올리기 올려짐: 2008-11-28 10:40
인용과 함께 답변 이 게시물을 del.icio.us에 추가

안녕하세요. 매크로 없는 메비~랍니다.

기즈모를 그릴때 언급하신 질문과 비슷한 방법을 쓰고 있습니다.

프로젝션 행렬의 목적은 view 공간에서의 z 값이 증가함에 따라 w 값이 증가하게 만들고 이 w 값의 역수를 xyz 에 곱하면 최종 -1.0 ~ 1.0 에 해당하는 공간에 모든 것들을 몰어넣게 됩니다. 그래서 어떠한 점을 view-proj 행렬로 변환했을때 나오는 w 값은 카메라 시점에서 봤을때 해당 점이 화면에 나타날 수 있는 전체 width 가 됩니다. 이렇게 설명하면 어려우니..

코드:
D3DXVECTOR3 pos; // 지름 1.0f 짜리 구의 위치
D3DXVECTOR4 result;
D3DXVec3Transform(&result, &pos, &m_viewProj); //카메라 공간의 z에 따라 w 값이 변화한다.
  
float scale = result.w / 2; //이 scale 을 지름 1.0f 짜리 구에 적용하면 항상 화면의 1/2 <B style="COLOR: #ffa34f">크기</B>의 구가 그려진다.


별로 어렵지 않으니 직접 실험을 해보시기 바랍니다. ^_^
위로
사용자 정보 보기 쪽지 보내기 MSN 메신저
이전 글 표시:   
잠김[?]    GpgStudy 게시판 인덱스 -> 그래픽 프로그래밍 시간대: GMT + 9 시간(한국)
페이지 11
글 잇기(시험중): |

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB © 2001, 2005 phpBB Group

  • 'Study > Graphics ' 카테고리의 다른 글

    일정한 크기의 빌보드.  (0) 2010.05.18
    3d 좌표를 2d로 바꾸는 법.  (0) 2010.05.17
    Effect Pool  (2) 2010.02.06
    Alternatives to Using Z-Bias to Fix Z-Fighting Issues  (0) 2009.11.11
    Surface Texture Mapping  (0) 2009.09.13
    TAGS.

    Comments