컴퓨터 그래픽스 30

#2 gulender 개발일지 : GUI 개발

저번 글에서 버텍스를 수정하는 기능을 만들었다.앞으로도 여러 기능이 추가될텐데..기능이 추가되기 위해서는 입력을 컨트롤 할 수 있어야 한다.그래서 기능을 더 추가하기 전에, 먼저 GUI를 만들었다. 외부 라이브러리처음에는 외부 라이브러리를 활용하려고 했었다.https://github.com/ocornut/imgui GitHub - ocornut/imgui: Dear ImGui: Bloat-free Graphical User interface for C++ with minimal dependenciesDear ImGui: Bloat-free Graphical User interface for C++ with minimal dependencies - ocornut/imguigithub.comhttps://g..

#1 gulender 개발일지 : 기본적인 조작, 버텍스 수정 기능

우선 openGL에 대한 기본적인 지식을 learnOpenGL 이라는 사이트에서 공부했다. https://learnopengl.com/ Learn OpenGL, extensive tutorial resource for learning Modern OpenGL Welcome to OpenGL Welcome to the online book for learning OpenGL! Whether you are trying to learn OpenGL for academic purposes, to pursue a career or simply looking for a hobby, this book will teach you the basics, the intermediate, and all the advanced..

#0 gulender 개발일지 : 개요

작년 이맘때쯤에, 오리키우기 이후 만들 게임을 구상하고 있었다. 여러가지 아이디어가 있었고, 그 중에 생각했던게 방치형 모바일 3d 농장 게임이 있었다. 3d 게임 포폴이 취업시장에서는 높게 쳐준다는 말도 있었고, 쉐이더에 관심이 있어서 쉐이더를 다뤄보고 싶었다. 그런데 가장 큰 장벽은.. 당연히 3d 모델링 그런데 당시 내가 원하는 스타일이 사실적인 느낌의 3d가 아니라 오리키우기처럼 캐주얼한 스타일이였기에 그림도 그릴줄 아니깐.. 내가 만들 수도 있을 것 같았다. 이런 느낌으로 만들고 싶었다. 그래서 호기롭게 블렌더3d를 깔아서 좀 다뤄보고 느낀 소감은.. 너무 어렵다 음..그냥 상상해보기엔 그냥 구 하나 늘려서 잎부분 만들고 원통 하나 늘려서 가지 만들어서 붙이면 나무를 만들 수 있을 것 같다고 생..

5. 렌더링 파이프라인

렌더링 파이프라인이라 3차원으로 만들어진 리소스를 2차원인 화면에 렌더링 하는 과정을 말한다. 입력 조립기 단계(Input Assembler) 입력 조립기 단계에서는 메모리에서 정점과 인덱스와 같은 기하 자료를 읽어서 기본 도형을 조립한다. - 정점(버텍스) 수학적으로 정점은 두 변이 만나는 점이다. 그러나 Direct3D의 정점은 도형의 꼭짓점 이상의 의미를 가지는데, 공간적 위치 외에도 정점에 법선 벡터를 추가하거나 텍스처 좌표를 추가하는등 다양한 커스텀 정점 형식이 있다. - 인덱스 3차원 물체의 기본 요소는 삼각형이다. 이러한 삼각형을 만들기 위해 정점 목록을 만들어 두고, 해당 정점들을 어떤 순서로 사용할지 인덱스를 적절히 나열함으로써 삼각형을 정의한다. 정점 셰이더 단계 입력 조립기 단계에서 ..

4. Direct3D의 초기화와 Tutorial02 코드 분석1

https://github.com/walbourn/directx-sdk-samples GitHub - walbourn/directx-sdk-samples: This repo contains Direct3D 11, XInput, and XAudio2 samples C++ samples from the legacy D This repo contains Direct3D 11, XInput, and XAudio2 samples C++ samples from the legacy DirectX SDK updated to build using the Windows 10 SDK - GitHub - walbourn/directx-sdk-samples: This repo cont... github.com 여기에 Direc..

DirectX11 개발 환경 설정

visual studio로 DirectX를 개발하기 위해 우선 개발 환경을 설정했다! https://developer.microsoft.com/ko-kr/windows/downloads/windows-sdk/ Windows SDK - Windows 앱 개발 Windows 11용 Windows SDK에는 Windows에서 실행되는 앱을 만들 때 사용할 수 있는 헤더, 라이브러리 및 도구가 포함되어 있습니다. developer.microsoft.com 우선 여기서 windowSDK를 설치했다. DirectX11부터는 windowSDK에 기본으로 들어가 있다고 한다.. 그리고 처음에 좀 해맸는데.. 비주얼 스튜디오에서 빈 프로젝트를 생성한 다음에 프로젝트 - 속성- VC++ 디렉터리로 가서 포함 디렉터리에서 ..

4. Direct3D 기본 지식

COM COM(Component Object Model)은 DirectX의 언어 독립성과 하위 호환성을 가능하게 하는 기술이다. 이게 뭔가 해서 GPT한테 물어보니... COM은 Windows 운영 체제에서 구성 요소를 만들고 통신하는 데 사용되는 기술이고, 개발자가 구성요소를 쉽게 생성하고 관리할 수 있게 도와준다고 한다.. 그리고 COM 인터페이스들은 이름이 대문자 I로 시작한다. 텍스처 2차원 텍스처는 사실상 자료 원소들의 행렬이다. 2차원 텍스처는 다양한 용도로 쓰이는데, 대표적으로 2차원 이미지 자료를 저장하거나, 텍스처의 각 원소가 3차원 벡터를 담을 수도 있다. 이후에 나올 깊이 버퍼도 텍스처의 한 종류이다. swap chain과 페이지 전환 애니메이션이 끊기지 않고 이어지기 위해, 전면 버..

3. 변환 : 변환들의 합성

S가 비례행렬, R이 회전행렬, T가 이동행렬이라고 할 때, 여덟개의 정점 vi로 이루어진 직육면체의 각 정점에 이 세 변환을 연달아 적용한다고 가정한다. ((viS)R)T = (vi'R)T = vi''T = vi''' 그런데 행렬 곱셈은 결합법칙을 만족하기에, 다음과 같이 표기할 수 있다. vi(SRT) = vi''' 즉 행렬 C= SRT, 세개의 변환을 행렬 곱셈을 이용해서 하나의 변환으로 결합할 수 있다. 이렇게 결합하면 더 좋은 성능을 낼 수 있다! 위의 경우처럼 8개의 정점을 가진 직육면체에 처음처럼 3가지 변환을 연달아 적용한다면, 벡터행렬 곱셈이 3*8번 필요하다. 그러나 결합된 행렬방식으로 계산하면, 행렬행렬 곱셈 두번과 벡터행렬 곱셈 8번이면 된다.

3. 변환 : 아핀변환

동차좌표 아핀변환이란 선형변환에 이동이 결합된 것이다. 그런데 선형변환은 벡터로 이루어져 있다. 벡터는 오직 방향과 크기만 서술하기에, 벡터는 이동에 대해 불변이여야 한다. 즉, 이동(위치벡터)는 오직 점에만 적용되어야 한다.. 이때, 동차좌표를 사용해서 점과 벡터를 동일한 방식으로 다룰 수 있다. 동차 좌표란 어떤 목적을 가지고 한 차원을 추가해 표현하는 것을 말한다. 한마디로 3차원 벡터에 w 성분을 추가한 것이다! 동차좌표의 형태는 1. 벡터의 경우 : (x,y,z,0) 2. 점의 경우 : (x,y,z,1) 아핀변환의 정의 및 행렬 표현 위에서도 말했지만, 아핀변환은 선형변환에 이동 벡터 b를 더한것이다. a(u) = t(u) +b 로 나타낼 수 있다! 이를 행렬로 표현하면.. 이때 w=1인 동차좌..