Computer Graphics 110

SCOP - 1. 오브젝트 이동, 회전 구현

OpenGL 지금까지 공부한 코드를 그대로 가져와 내 입맛대로 변경하여 과제를 완료하려고 한다.github commit상 09-03에 해당하는 코드를 가져왔다.https://surkim.tistory.com/32 OpenGL 정리 - 17. 오브젝트 로더 구현 (Assimp)Objective박스 외의 오브젝트를 렌더링해보자. 실제 게임 등에 사용되는 오브젝트를 렌더링하기 위해 어떤 작업을 해야 할까?3D Modeling Tool을 이용해 3D 모델을 디자인.3D 모델 파일 포맷으로 저장.저surkim.tistory.com 과제에서는 이벤트 입력과 창 띄우는 거 외에 모든 라이브러리를 사용해선 안 된다고 했지만, 일단 모든 라이브러리를 사용해 프로젝트를 완성하고 그 라이브러리들을 대체해 나가는 방식으로 접..

SCOP - 0. 과제해석

이번 SCOP 과제는 OpenGL을 배우면서 기본적인 GPU 렌더링을 연습하기 위한 첫 번째 과제이다. 3D 객체를 파싱하고 화면에 렌더링하는 경험을 쌓기 위해 이 과제를 선택하게 되었다. 특히, 이 프로젝트는 OpenGL의 여러 기능을 체험할 수 있는 좋은 기회로 생각하고 있으며, 과제의 세부 사항은 다음과 같다.프로젝트 개요SCOP 프로젝트는 3D 객체를 화면에 렌더링하는 프로그램을 개발하는 것을 목표로 한다. 객체는 .obj 파일로부터 파싱되며, 프로그램은 해당 객체를 화면에 퍼스펙티브로 회전시켜 보여준다. 각 면은 다른 색상으로 구분되고, 특정 키를 누르면 텍스처가 적용되며 다시 누르면 색상 모드로 돌아간다. 이 과정은 부드러운 전환이 필요하다.목표OpenGL을 사용해 3D 객체를 화면에 렌더링하..

OpenGL 정리 - 17. 오브젝트 로더 구현 (Assimp)

Objective박스 외의 오브젝트를 렌더링해보자. 실제 게임 등에 사용되는 오브젝트를 렌더링하기 위해 어떤 작업을 해야 할까?3D Modeling Tool을 이용해 3D 모델을 디자인.3D 모델 파일 포맷으로 저장.저장된 파일을 읽어들이는 Object Loader를 구현.3D Modeling Tool3D 모델을 생성하고 편집할 수 있는 도구들이 있으며, 다양한 작업을 처리할 수 있다:Modeling: 기본적인 형태를 만들고 수정하는 과정.Sculpting: 세밀한 디테일을 더하는 과정.UV Unwrapping: 3D 표면을 평면으로 펼쳐 텍스처를 입히는 과정.Rigging: 애니메이션을 위한 뼈대를 구성.Animation: 물체에 움직임을 부여.대표적인 툴:Blender 3D: 오픈소스, 강력한 기능을..

OpenGL 정리 - 16. Light Casters

이번에는 다양한 Light Casters에 대해 알아보겠다. Light Caster는 물체에 빛을 쏘는 광원의 유형을 의미하며, 주로 Directional Light, Point Light, Spot Light 세 가지가 많이 사용된다.1. Directional LightDirectional Light는 광원이 매우 멀리 떨어져 있어서 모든 지점에 동일한 방향으로 평행하게 빛이 발사되는 형태다. 태양과 같은 광원을 예로 들 수 있다. 태양처럼 광원이 무한히 멀리 있다고 가정하면, 지구 상의 모든 지점에 태양광이 같은 방향에서 들어오기 때문에 평행한 빛으로 처리하게 된다.2. Point LightPoint Light는 한 점에서 시작해서 모든 방향으로 빛이 퍼지는 광원이다. 흔히 볼 수 있는 전구가 대표적..

OpenGL 정리 - 15. Texture Map 적용

이번 포스팅에서는 Fragment Shader에서 텍스처를 적용하는 방법에 대해 다루겠다. 텍스처는 물체 표면에 색상을 입히는 중요한 역할을 하며, 이를 텍스처 맵핑(Texture Mapping)이라고 한다. 텍스처를 적용하려면 텍스처 이미지를 로드하고, 셰이더에서 사용할 수 있도록 유니폼으로 넘겨주는 과정이 필요하다.1. 텍스처 로딩 및 유니폼 설정먼저, 텍스처 이미지를 로드하고 이를 OpenGL에 바인딩한 후, 셰이더에서 사용할 수 있도록 유니폼으로 설정하는 과정을 살펴보겠다.텍스처 이미지 로드// 텍스처 이미지 로드 및 생성m_material.diffuse = Texture::CreateFromImage( Image::Load("./image/container2.png").get());m_ma..

OpenGL 정리 - 14. Phong Model 적용

이번에는 Phong 모델을 사용해 조명 처리를 어떻게 적용하는지 다루겠다.Phong 모델은 물체 표면의 색상을 결정할 때 주변광(ambient), 분산광(diffuse), 반사광(specular) 세 가지 요소를 더해 최종 색상을 계산하는 모델이다. 이 모델은 OpenGL에서 조명 효과를 구현할 때 많이 사용된다.1. 조명물체 표면의 색상은 빛의 상호작용으로 결정된다. 이 상호작용을 계산하는 데는 여러 방식이 있는데, 크게 Local Illumination과 Global Illumination으로 나눌 수 있다.Local Illumination은 물체가 직접적으로 받는 빛만을 고려하고, 반사광을 따로 계산하지 않는다. 반면, Global Illumination은 빛의 반사와 같은 요소까지 모두 고려해 더..

OpenGL 정리 - 13. IMGUI

이번은 IMGUI(Immediate Mode GUI)를 사용하여 OpenGL에 GUI를 손쉽게 적용하는 방법에 대해 설명하겠다.IMGUI는 즉시 모드 방식으로 UI를 구성하며, 별도의 복잡한 GUI 프레임워크 없이 간단하게 그래픽 요소를 그릴 수 있다.1. OpenGL에서의 GUI 구현의 어려움OpenGL에서 GUI 요소를 직접 구현하려면 상당한 노력이 필요하다. 기본적인 버튼, 슬라이더, 텍스트 필드 등을 구현하기 위해서는 셰이더(Shader), 프로그램(Program), VBO, VAO, EBO, Uniform, 텍스처(Texture) 등을 모두 관리해야 한다. 이러한 복잡한 과정은 개발자의 부담을 크게 늘릴 수 있다.GUI를 구현하는 데는 두 가지 방식이 있다:별도의 GUI 프레임워크를 사용하여 화..

OpenGL 정리 - 12. 카메라, View Transform

이번에는 OpenGL에서 카메라를 다루는 방법에 대해 정리하겠다.카메라는 3D 그래픽에서 화면을 어떤 시점에서, 어떤 방향으로 바라볼지를 결정하며, 이를 통해 사용자는 3D 공간을 자유롭게 탐색할 수 있다. 특히 카메라 조작과 관련된 수식과 이를 코드로 구현하는 방법을 설명하겠다.1. 카메라의 기본 개념3D 그래픽에서 카메라는 가상의 위치에 있으며, 우리가 보는 시야를 결정한다. 이를 위해 카메라 좌표계(Camera Space)에서 View Transform을 유도하는 여러 파라미터들이 필요하다.카메라 파라미터Camera Position: 카메라의 위치.Camera Target: 카메라가 바라보는 중심점.Camera Up Vector: 카메라 화면의 세로축을 결정하는 벡터. (일반적으로 Y축)위의 파라미..

OpenGL 정리 - 11. 큐브 그리기, Depth Buffer, 여러 큐브 그리기

OpenGL을 사용하여 3D 큐브를 그리는 방법과 좌표 변환, 깊이 버퍼, 그리고 여러 개의 큐브를 동시에 그리는 방법에 대해 배웠다. 기본적인 개념 설명과 함께 실제 코드 예시를 통해 어떻게 구현할 수 있는지 살펴보자.1. 좌표계와 변환좌표계는 local space, world space, view space, 그리고 clip space로 나뉜다. 물체는 처음에는 local space에서 정의되지만, 화면에 그려지기 위해서는 다른 좌표계로 변환되어야 한다. 이 변환 과정은 아래와 같다.Local Space -> World Space: 모델 변환 행렬을 통해 물체를 세계 좌표계로 변환한다.World Space -> View Space: 카메라의 위치와 방향을 반영하여 세계 좌표계를 카메라 좌표계로 변환한..

OpenGL 정리 - 10. GLM을 이용한 선형 변환

GLM을 이용한 선형 변환GLM(OpenGL Mathematics)을 사용해 선형 변환을 처리하는 방법을 다뤄보겠다. OpenGL에서 물체의 위치, 크기, 방향을 조정하는 데 필수적인 수학적 연산을 GLM을 통해 쉽게 구현할 수 있다. 이번 예제는 점을 변환하는 과정을 통해 GLM의 기본 기능을 살펴볼 것이다.GLM을 사용한 벡터 및 행렬 연산OpenGL에서 물체의 위치나 방향을 변경하려면 벡터와 행렬을 이용한 선형 변환을 사용해야 한다. GLM은 이를 쉽게 처리할 수 있도록 다양한 연산 함수를 제공한다.다음 코드는 GLM을 사용하여 평행이동, 회전, 확대 등의 변환을 적용한 예시이다.// 위치 (1, 0, 0)의 점. 동차 좌표계 사용glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);..