• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

안녕하세요 선생님 Camera 다루시는 부분에 대해서 질문드립니다.

21.04.10 14:42 작성 조회수 131

0

1. 정점(버택스)의 로컬좌표, 월드좌표에 관하여

유니티 부분 설명하실 때

예를들어 sphere1(부모) sphere2(자식)

오브젝트들을 하이러키?(계층)화 시켜서

월드의 디테일패널에서 sphere2(자식) 오브젝트를 마우스로

클릭하면 

트랜스폼 정보 position x,y,z 값이 

부모에 대한 로컬 좌표 (position)이고,

sphere1(부모)은 따로 부모가 없으니까 

월드 좌표 0,0,0 기준으로 얼마만큼 떨어진 월드 좌표

(position)이 찍힌다고 하셨는데

그럼 자식 sphere2의 월드 좌표를 알고 싶으면

디테일패널에서는 못보고 

코드에서 예를들어 sphere2 의 GetActorWorldLocation(?)

으로 알수 밖에 없나요? 디테일 패널에서는 오직

부모(태양) 자식(지구)의 상대적인 위치만 보여지는 건지

2. 공지사항 내용처럼 일단 클 틀을 잡고 그림으로

도식화 시켜가며 메모 하면서 일단 한 바퀴 돌리고

처음부터 강의 다시보면서 그때 의문점이 생기면 질문 

하려 했는데 좀 찝찝해서,,, 

지금 Camera 수업에서 트랜스폼 클래스 내부에서

// *** 트랜스폼에서 데이터를 만들어 주고, const buffer에 밀어 넣어줘서 최종적으로 GPU에 건네 주는 함수

void Transform::PushData()

{

TransformParams transformParams = {};

transformParams.matWorld = _matWorld;                                               // 트랜스폼의 월드 행렬

transformParams.matView = Camera::S_MatView;                                       // 트랜스폼의 뷰 행렬

transformParams.matProjection = Camera::S_MatProjection; // 트랜스폼의 프로젝션 행렬

transformParams.matWV                = _matWorld * Camera::S_MatView; // 월드행렬 * 뷰행렬

transformParams.matWVP               = _matWorld * Camera::S_MatView * Camera::S_MatProjection; // 월드행렬*뷰행렬*프로젝션행렬

transformParams.matViewInv           = Camera::S_MatView.Invert();

CONST_BUFFER(CONSTANT_BUFFER_TYPE::TRANSFORM)->PushGraphicsData(&transformParams, sizeof(transformParams));

}

PushData 함수에  이렇게 행렬 정보들을 CONSTBUFFER

에 밀어 넣어주어 GPU에 보내는 작업이 

정점의 좌표에  로컬 -> 월드 -> 뷰

-> 투영 단계에서 사용하는 변환 행렬들을 곱해서

2D 화면에 눈으로 보여지는

랜더링 파이프 라인 단계에서 일종의

버택스 쉐이더 단계전에 드로우콜?을 GPU에게 보내주는 것이라고  봐도 되나요?

답변 1

답변을 작성해보세요.

0

1.
Hierarchy에는 부모 기준으로 나오기 때문에 World 기준으로 알고 싶다면
부모 밖으로 빼내서 World에 배치하면 되긴 합니다.
(굳이 그 값을 알아야 할 필요는 없겠지만..)

2.
VS 단계 전의 드로우콜 << 이거는 아니구요
말 그대로 World, View, Projection 변환 행렬 자체를 보내주는 것입니다.
그걸 VS, HS, DS, PS 어디서든 어떻게 쓸지는
전적으로 셰이더에서 필요에 따라 결정하는 것이죠.