본문으로 바로가기

나만의 연습장

현재위치 :: HOME BLOG CATEGORY SEARCH ARCHIVE TAGS MEDIA LOCATION GUESTBOOK

네비게이션

  • 홈
  • 태그
  • 방명록
관리자
  • 블로그 이미지
    엄준식사생팬

    엄준식이 좋아요.

    링크추가
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃

원근 투영 변환 - 깊이값( Perspective projection transformation - Depth )

3차원 공간에서 다수의 물체를 그릴 때 그리는 순서를 고려하지 않고 그리면 다음과 같이 어떤 오브젝트가 더 앞에 있는지 알 수 없다. 이를 해결하기 위해선, 우리가 깊이 값을 파악하고 앞에 있는 물체를 뒤에 있는 물체가 덮어쓰지 않게 하기 위해 픽셀 별로 깊이 값을 계산해야 한다. 깊이 값 이를 해결하기 위해서는 픽셀별로 앞에 있는지, 뒤에 있는지 순서를 파악하기 위한 정보가 필요하다. 화면으로 쓸 NDC는 2차원이였으므로 z를 통한 판별이 불가능하다, 대신 NDC 공간을 3차원으로 확장해보자 이러한 깊이를 지정할 때 필요한 것이 절두체 (Frustum) 인데 투영 공간과 카메라의 화각 등을 생각해보면 무한대에서 무한대로 진행되는 공간이라고 할 수 있다. 하지만 우리가 이런 무한대의 공간의 깊이 값을 산..

Graphics/이론 2022. 11. 17. 16:54

원근 투영 변환 ( Perspective projection transformation )

투영 변환3D 투영은 2차원 표면에 3D개체를 표시하는데 사용되는 디자인 기술이다.즉, 우리 눈이 바라보는 방식으로 가상 공간을 변환하는 것이다.가상 공간에서 눈과 동일한 행동을 하는 물체는 카메라다. 즉 눈과 동일한 행동을 하려면, 멀리 있는것은 작게 가까이 있는 것은 크게 보이는 '원근감' 을 나타내줄 필요가 있는데이런 원근감을 나타내면서 투영하는 작업을 원근 투영 변환이라고 한다.그래서 원근 투영 변환을 설계하기 위해서는 눈에 보이는 범위를 카메라에도 설정해야하는데, 이를 화각 ( Field Of View ) 이라고 한다.카메라에 화각을 설정하면 아래의 그림과 같이 좌우와 위아래가 균등한 사각뿔 영역이 만들어 진다. 원근 투영 변환은 x, y, z축이 모두 직교하는 정육면체 형태..

Graphics/이론 2022. 11. 14. 16:15

뷰 변환 ( View Transformation, Camera Transformation )

뷰 공간 월드 공간은 굉장히 넓은 영역이다. 이 영역을 다 보여줄 순 없고, 플레이어가 특정 원하는 지점을 보여줘야 하는데 이러한 화면을 보여주기 위해 하나의 '가상 카메라' 가 있다고 생각하는 것이다. 화면에 대응하는 카메라를 만들고 이 카메라를 중심으로 화면이 보이도록 해야한다. 이를 위해서는 카메라를 중심으로 물체의 정보를 재조정하는 작업이 필요하는데, 카메라를 중심으로 변환한 공간을 뷰 공간 (View Space) 라고 한다. 사실 뷰 변환이라는건 별거 없다. 모든 정점을 '카메라 위치로 재변환' 하는것인데 이를 다르게 생각해보면 1. 카메라를 원점으로 보낸다 2. 원점으로 보낸 변환을 모든 오브젝트에 적용한다 -> 카메라는 원점에 있으며 모든 오브젝트는 카메라의 변환만큼 카메라와 동일하게 이동했..

Graphics/이론 2022. 11. 8. 14:27

오일러 변환 (Euler Transformation)

오일러 각 (Euler angle) 오일러 각은 3차원 공간에서 물체가 놓인 방향을 3개의 각을 사용해 표시하는 방법이다. 각 방향을 표시할때는 표준기저벡터를 사용한다. 그래서 오일러 각은 표준기저벡터를 중심으로 회전하는 각의 크기로 지정된다. 소프트웨어마다 x, y, z 축은 다르다. 예를 들어 언리얼 엔진에서의 x, y, z 축의 회전과 유니티 엔진에서의 x, y, z 축의 회전은 다르다. (언리얼엔진은 z-up 이고, 유니티는 y-up 이다.) 이렇기 때문에, 언리얼 엔진에서의 각 정보를 유니티 엔진으로 넘겨 사용할 수 없는데 이를 해결하기 위해 x, y, z 축 대신 회전의 움직임으로 회전 동작을 구분하고 각을 지정하는 방법을 사용한다. 표준기저벡터를 축으로 하는 회전의 움직임은 방향에 따라 ya..

Graphics/이론 2022. 10. 31. 20:51

월드 변환 ( World Transformation )

이 글을 읽는 사람이 기초 개념을 알고있다고 가정합니다. ( 선형성, 행렬 등 ) 월드 변환이란? 월드 변환은 모델의 로컬 원점을 기준으로 Vertex가 정의된 모델 공간에서 모든 개체에 공통된 원점을 기준으로 정의되는 World Space로 좌표를 변경하는 것이다. 월드 변환에는 좌표 이동, 회전 및 크기 조정이 포함될 수 있다. 월드 변환을 알기 전에 '좌표 이동', '회전', '크기' 조정에 대해 알아야 한다. 이동 변환 말 그대로 어떠한 Vertex를 특정 크기만큼 이동시키는 변환을 의미한다. 이동 변환을 수식으로 표현하면 다음과 같다. $$\begin{cases}x' = x + a\\y' = y + b\\z' = z + c \end{cases}$$ 이동 행렬은 다음과 같다. $$ \begin{b..

Graphics/이론 2022. 10. 23. 20:19

C++20) std::format

C++ 은 언어에 텍스트 형식을 가져오기 위해 예전부터 여러 시도를 했었습니다. 첫 번째로는, C에서 상속된 printf 입니다. std::printf("hello %s\n", "world!"); std::printf 는 간결하고, 빠르며, 완벽하게 작동합니다. 요즘은 디버거들과 IDE 들이 printf()같은 API를 통합하고 있을 정도로 보편적이고 성공적이였습니다. 현재 2022년에도 아직도 printf로 디버깅 (변수 값을 찍어본다거나..) 하는 분들 계시잖아요? 그러나 너무 간결한게 문제였습니다. std::printf 는 built-in type 들 (int, const char* 등..) 에 대해서만 작동했고 포매팅 (%d, %c) 은 안전하지 않았으며 varargs 같은 가변 인자를 사용했었습..

C++/Modern 2022. 1. 11. 22:18

SIMD Intrinsics

SIMD( Single Instruction Multiple Data ) 란 하나의 명령어로 여러개의 데이터를 처리할 수 있는 기술을 말한다. CPU에서 지원되는 명령어 셋을 사용한다. CPU의 아키텍처 모델에 따라 SIMD 기능을 지원한다. Intel & AMD MMX, SSE, SSE2, AVX, AVX2, AVX512F ARM NEON SIMD 를 이해하기 위해서는 기존에 알고있는 SISD( Single Instruction Single Data ) 와의 차이점을 알아야한다. 사진 출처 : 링크 4개의 32Bit 정수 A0, A1, A2, A3 가 있고, B0, B1, B2, B3가 있다고 했을 때 SISD 연산은 A0 + B0, A1 + B2, ... 각 각 덧셈을 하기 위해서 총 4번의 연산이 ..

C++/Before 2022. 1. 4. 15:32

회사 업무로인해 업데이트가 늦습니다.

정보들은 SIMD Intrinsics C++20 - std::format UE4 - Actor 순으로 업데이트 될 예정입니다.

C++/여담 2022. 1. 4. 07:48
  • 이전
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • ···
  • 17
  • 다음

사이드바

NOTICE

  • 전체 보기
MORE+

CATEGORY

  • 분류 전체보기 (129)
    • 알고리즘 (13)
      • 정렬 (1)
      • 동적계획법 (9)
      • 완전탐색 (2)
    • C++ (63)
      • Modern (40)
      • Before (2)
      • STL (11)
      • 여담 (8)
      • WinApi (1)
    • Graphics (17)
      • 이론 (8)
      • DirectX (3)
      • Vulkan (6)
    • Computer Science (0)
    • UnrealEngine (32)
      • 기능 (13)
      • Impl (14)
      • Issue (1)
      • Editor (4)
    • Unity3D (4)
      • 기능 (4)

RECENTLY

  • 최근 글
  • 최근 댓글

최근 글

최근댓글

Trackback

TAG

  • UnrealEngine
  • UnrealEditor
  • 여담
  • UnrealEngineIssue
  • UnrealEngine5
  • c++
  • Modern
  • Before
  • vulkan
  • unity3D
  • c++20
  • 언리얼엔진4
  • Firebase
  • stl
  • 언리얼엔진5
MORE+

ARCHIVE

CALENDAR

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

LINK

VISITOR

오늘
어제
전체
  • 홈으로
  • 방명록
  • 로그인
  • 로그아웃
  • 맨위로
SKIN BY COPYCATZ COPYRIGHT 나만의 연습장, ALL RIGHT RESERVED.
나만의 연습장
블로그 이미지 엄준식사생팬 님의 블로그
MENU
  • 홈
  • 태그
  • 방명록
CATEGORY
  • 분류 전체보기 (129)
    • 알고리즘 (13)
      • 정렬 (1)
      • 동적계획법 (9)
      • 완전탐색 (2)
    • C++ (63)
      • Modern (40)
      • Before (2)
      • STL (11)
      • 여담 (8)
      • WinApi (1)
    • Graphics (17)
      • 이론 (8)
      • DirectX (3)
      • Vulkan (6)
    • Computer Science (0)
    • UnrealEngine (32)
      • 기능 (13)
      • Impl (14)
      • Issue (1)
      • Editor (4)
    • Unity3D (4)
      • 기능 (4)
VISITOR 오늘 / 전체
  • 글쓰기
  • 환경설정
  • 로그인
  • 로그아웃
  • 취소

검색

티스토리툴바