ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 투영변환 정리
    @ 16. 1 ~ 17. 1/면접관련 2017. 1. 8. 23:46

    투영변환은 3차원 좌표를 2차원 좌표로 변환하는 단계이다.

    NDC 노말라이즈 디바이스 쿠디네이트이 좌표계로 전환


    원근투영이란

    상 하 , 좌우의 Y, X축상의 평면이 서로 벌어지는 형상을한 절두체 상의 좌표계를 투영좌표계로 변환하는 것을 이야기한다.

    이때 X축 좌표와 Y축좌표는 시야각과 종횡비에 따른 값을 Z값으로 나누어서 계산하게 된다.

    (Y축이 시야각, X축이 시야각과 종횡비를 통해서 구하게 된다.)

    시야각이 작으면 물체는 크게 보임, 시야각이 크면 물체는 작게 보임. 종횡비는 보통 화면의 너비를 높이로 나눈것이다.

    가까운 평면과 먼평면의 깊이값은 0 ~ 1 사이로 ( N ~ F)로 변환을 하게 되는데 이때는 연립방정식으로 구하는....


    어쩄든 이게 끝이다.

    .


    직교투영

    거리에 따른 크기나 길이의 왜곡을 만들지 않고 그대로 투영하는것.

    x,y 좌표는 화면의 너비와 높이를 나누어주는것으로 구성된다.

    이것은 투영시 화면의 너비와 높이를 투영영역으로 생각하고 기존 정점을 변환하기 때문에 화면의 너비와 높이를 비율로 기존 정점에 나누어주는것이다.


    1. 정점을 화면의 가로 / 세로로 나누어 준다.

    이 과정은 화면의 너비와 높이를 정점의 표현공간으로 생각하여 이루어지는 작업입니다.

    윈도우 영역을 일종의 좌표계로 생각해보면..영역이 커지게 되면 동일한 좌표의 객체는 전체화면과의 비율상 그만큼 작아지게된다.


    2. 이때 정점 좌표를 2배로 늘인 후에 작업합니다.

    화면 영역을 좌표계로 생각하고 비율을 구하기 위해서 정점의 영여긔 너비와 높이를 나누는것인데, 여기에 2를 곱하는 처리를 함께 수행한다.

    왜 정점을 굳이 2배 해주는가?

    왜냐면 다이렉트는 데카르트 좌표계 즉  화면 중앙이 원점이다. 그래서 2배 해줘서 화면 큰으로 맞추는것..?


    내가 직교투영을 만든방법

    0. 월드 행렬도 항등행렬로 만들어야 한다.

    1. 기본적으로 뷰 행렬을 항등행렬로 지정한다.(왜냐면 카메라의 회전이나 이동값을 반영하면 안되니까..)

    정점을 움직이고 싶다면 41 ~ 43인자에 따로 원하는 값을 넣으면 된다. 좌표값.

    그리고 뷰의 11 22 33에 지정한 비율 즉, 텍스쳐의 크기를 넣는다 33의 경우 1을 넣는다.

    (버퍼의 크기가 단 1인경우여야 한다 그래야지 객체의 size처럼 이용이 가능함..)


    2. 투영 행렬을 별개의 행렬로 만든다. 직교투영


    그리고 출력직전에 직교투영으로 투영행렬을 변경하고..

    타 객체 출력시에는 기존의 뷰행렬과 투영행렬을 사용해서 처리한다.

    '@ 16. 1 ~ 17. 1 > 면접관련' 카테고리의 다른 글

    UML 기본  (0) 2017.01.11
    클래스 다이어그램(UML) 정리  (0) 2017.01.10
    면접 필기 예상문제  (0) 2017.01.08
    재귀함수 문제(반복문 치환)  (0) 2017.01.06
    콜백함수 정의 정리  (0) 2017.01.06
Designed by Tistory.