OpenGL/공부 22

[OpenGL] Skybox

우리가 게임에서 보는 광활한 skybox는, 사실 실제로 맵 전체를 둘러싸고 있지 않다. 스카이림의 한 스크린샷인데, 만약 실제로 오로라와 달을 저 멀리 두고 렌더링하는 것이라면, far clipping plane을 엄청 멀리 둬야 할 것이다. 실제로는, 저 오로라와 달을 포함한 하늘은 정확히 딱 카메라만 감싸고 있다.대충 그림으로 그려보자면 이렇게 표현할 수 있다. 그런데 저 그림대로라면, 다른 모든 오브젝트들은 skybox에 가려져 안 보여야 할 것이다.지금까지 화면에 오브젝트들을 그릴 때 depth testing을 해왔기 때문이다. 이를 해결하기 위해 처음 skybox를 그릴 때만 depth testing을 비활성화할 것이다. 그러면 실제로는 skybox가 가장 가까이 있는 것임에도 불구하고, 다른..

OpenGL/공부 2024.07.18

[OpenGL] FrameBuffer 생성, 사용

참조 : https://learnopengl.com/Advanced-OpenGL/Framebuffers LearnOpenGL - FramebuffersFramebuffers Advanced-OpenGL/Framebuffers So far we've used several types of screen buffers: a color buffer for writing color values, a depth buffer to write and test depth information, and finally a stencil buffer that allows us to discard certain fragmenlearnopengl.com  우선 framebuffer라는 것에 대해 짚고 넘어가자면,GPU는 그림을 ..

OpenGL/공부 2024.07.16

[OpenGL] ImGuizmo 설치, 사용법

어제 이것 때문에 12시간을 고통받아서, 언젠가 또 나중을 위해서 기록해둘 겸 글을 남기려고 한다. 쓰는 사람이 적어서 그런지 인터넷 상에 정보가 매우 적어서, 이 글이 조금이나마 다른 분들에게 도움이 되었으면 좋겠다.  먼저 ImGui가 설치되어있다는 것을 전제로 한다.https://ciel45.tistory.com/111 [OpenGL] 게임 엔진 개발 (1) - 시작 + ImGui지금까지 학습한 내용을 바탕으로 게임 엔진 제작을 시작하였다.  우선 엔진의 기본 구성 요소들(Camera, Model, Mesh, Light, Material 등)은 공부 일지에서 사용했던 코드를 사용하되, 내 스타일에 맞게ciel45.tistory.com  ImGuizmo는 ImGui에서 사용할 수 있는 gizmo 라이..

OpenGL/공부 2024.07.16

[OpenGL] Model Loading (Assimp)

Assimp는 Open Asset Import Library의 약자로, fbx, obj, gltf 등 다양한 3d 모델 포맷을 지원한다. OpenGL 프로그램에서 모델링 불러올 때는 웬만하면 이걸 사용하는 것 같다.학교 수업에서도 사용했고, learnopengl.com에서도 이걸 소개하고 있다.  우선 얘가 사용하는 구조를 보자면 다음과 같다. 이 다이어그램 전체가 하나의 모델이라고 생각하면 된다.언뜻 보기에는 좀 복잡한데, 천천히 살펴보자면우선 중요한 점을 하나 짚고 가자면, 모델은 여러개의 메시로 이루어져있다.모델의 모든 데이터는 Scene 안에 담겨있다. (material, mesh 등)좌측을 보면 Scene에 Root node가 달려있고, 그 아래로 트리처럼 Child node들이 달려있는 것을 ..

OpenGL/공부 2024.07.13

[OpenGL] Normal Transformation (Normal Matrix)

학교 컴퓨터 그래픽스 수업에서는 적당히 언급만 하고 넘어갔던 부분이라서, 개인적으로 공부해보았다.  Phong Reflection Model을 통한 쉐이딩을 위해서는 물체의 표면의 normal을 구해야 한다.이 때의 normal은 World Space(월드 좌표계) 기준이어야 한다. 쉐이딩은 World Space에서 처리할 것이기 때문. 위치나 벡터를 Object Space에서 World Space로 변환하는 방법은 Model Matrix를 곱하는 것이고, normal 역시 uniform scaling(x, y, z 축으로 같은 비율로 scaling)일 경우에는 그냥 Model Matrix를 곱하면 된다.   다만, non-uniform scaling을 수행하는 Model Matrix의 경우 그냥 곱하면..

OpenGL/공부 2024.06.15

[OpenGL] Phong Reflection Model - 개요

Phong Reflection Model은 워낙 유명하고 관련 문서도 많으니, 간단하게 개요만 적으려 한다. 원래 3D 공간 상에서 빛과 쉐이딩을 표현하려면, 빛이 사물에 부딪혀 반사되는 것을 모두 시뮬레이션해야한다.반사는 매우 많이 일어날 것이기 때문에, 리얼타임으로는 이러한 시뮬레이션이 힘들다. Phong Reflection Model은 빛의 표현을 간단하게 근사하는 모델이다.  3가지 파트로 이루어진다.Ambient Lighting : 주변광을 의미한다. 빛이 외부로부터 들어올 때, 예를 들면 바깥에서 자연광이 창문 등으로 들어온다고 했을 때, 빛이 직접적으로 닿지 않는 곳도 어느정도 밝게 보인다.일부 구역은 빛이 직접적으로 때리지 않더라도 환경과의 복잡한 난반사로 인해 어느정도의 밝기를 가지게 되..

OpenGL/공부 2024.06.15

[OpenGL] Textures (5) - 적용 (VAO 수정)

텍스쳐를 입히기 전 먼저 도형들에 텍스쳐 좌표를 넣어줄 것이다. 현재 만들어둔 도형은 삼각형으로만 이루어진 피라미드 모양이므로, 각 면에 다음과 같은 모양으로 텍스쳐를 입힐 것이다. 이 점을 감안하면서 각 버텍스마다 텍스쳐 좌표를 지정해주었다.GLfloat vertices[] = { //x y z u v -1.0f, -1.0f, 0.0f, 0.f, 0.f, 0.0f, 1.0f, 0.0f, 0.5f, 1.f, 0.0f, -1.0f, 1.0f, 1.f, 0.f, 0.0f, -1.0f, 1.0f, 0.f, 0.f, 0.0f, 1.0f..

OpenGL/공부 2024.06.13