본문 바로가기

Game/Graphics

(68)
Learn OpenGL - Getting started : Camera link : https://learnopengl.com/Getting-started/Camera Camera 앞의 튜토리얼에서 우리는 뷰 매트릭스와 뷰 매트릭스를 사용해 장면 주위를 이동하는 방법에 대해 논의했다. OpenGL 자체는 카메라 개념에 익숙하지 않지만 장면의 모든 객체를 반대 방향으로 이동해 움직이는 듯한 착각을 불러 일으켜 시뮬레이션 할 수 있다. 이 튜토리얼에서는 OpenGL에서 카메라를 설정하는 방법에 대해 설명한다. 3D 장면에서 자유롭게 움직일 수 있는 FPS 스타일의 카메라에 대해 설명한다. 이 튜토리얼에서는 키보드 및 마우스 입력에 대해 설명하고 사용자 정의 카메라 클래스로 마무리한다. Camera/View space 카메라/뷰 공간에서 우리는 카메라의 관점에서 볼 때 모든 정점..
Learn OpenGL - Getting started : Coordinate Systems link : https://learnopengl.com/Getting-started/Coordinate-Systems Coordinate Systems 마지막 튜토리얼에서 모든 정점을 변환 행렬로 변환해 행렬을 우리의 장점으로 활용할 수 있는 방법을 배웠다. OpenGL은 각 정점 쉐이더가 실행된 후에 정규화된 장치 좌표로 표시될 모든 정점을 기대한다. 즉, 각 정점의 x, y, z좌표는 -1.0에서 1.0사이어야한다. 이 범위를 벗어나는 좌표는 보이지 않는다. 우리가 일반적으로 하는 일은 우리가 스스로 설정한 범위의 좌표를 지정하는 것이며 정점 쉐이더에서는 이 좌표를 NDC로 변환한다. 그런 다음 NDC 좌표를 rasterizer에 제공해 화면에서 2D 좌표/픽셀로 변환한다. 좌표를 NDC로 변환한 다..
Learn OpenGL - Getting started : Transofrmations link : https://learnopengl.com/Getting-started/Transformations Transformations 우리는 이제 오브젝트를 생성하고, 색상을 지정하고, 텍스처를 사용해 자세한 모양을 제공하는 방법을 알고 있다. 그러나 그것들은 모두 정적 오브젝트이므로 여전히 흥미롭지 않다. 정점을 변경하고 각 프레임의 버퍼를 다시 구성해 시도해 볼수는 있지만 성가시고 비용이 많이 든다. 객체를 변형하는 방법은 훨씬 더 많다. 그 방법은 (여러) 행렬 객체를 사용하는 것이다. 이것은 우리가 kungfu 및 큰 디지털 인공 세계에 대해서 이야기하기 위해 하고 있다는 것을 의미하지 않는다. 행렬은 처음에는 두려운 것처럼 보이는 매우 강력한 수학적 구조이지만 일단 익숙해지면 매우 유용한..
Learn OpenGL - Getting started : Textures link : https://learnopengl.com/Getting-started/Textures Textures 객체에 더 많은 디테일을 추가하기 위해 각 정점에 색상을 사용해 흥미로운 이미지를 만들 수 있음을 알게 되었다. 그러나 사실적인 느낌을 얻기 위해서는 많은 정점을 가져야하므로 많은 색상을 지정할 수 있다. 각 모델에는 더 많은 꼭지점이 필요하고, 각 꼭지점마다 색상 속성이 필요하기 때문에 상당한 추가 오버 헤드가 요구된다. 예술가와 프로그래머가 일반적으로 선호하는 것은 텍스처를 사용하는 것이다. 텍스처는 오브젝트에 디테일을 추가하는 데 사용되는 2D이미지이다. (1D 및 3D 텍스처도 있다) 좋은 벽돌 이미지가 있는 종이 조각처럼 텍스처를 3D 집 위에 깔끔하게 접어서 집에 돌 외관이 있는..
Learn OpenGL - Getting started : Shaders link : https://learnopengl.com/Getting-started/Shaders Shaders Hello Triangle 튜토리얼에서 말했듯이 쉐이더는 GPU에 거의 의존하지 않는다. 이러한 프로그램은 그래픽 파이프 라인의 특정 섹션마다 실행된다. 기본적으로 쉐이더는 입력을 출력으로 변환하는 프로그렘에 지나지 않는다. 쉐이더는 서로 통신할 수 없기 때문에 매우 고립되있다. 그들이 가진 유일한 커뮤니케이션은 입력과 출력을 통해서이다. 이전 튜토리얼에서 우리는 쉐이더의 표면과 그것들을 적절하게 사용하는 방법을 간략하게 설명했다. 보다 일반적인 방식으로 쉐이더, 특히 OpenGL 쉐이딩 언어를 설명할 것이다. GLSL 쉐이더는 C와 유사한 언어 GLSL로 작성된다. GLSL은 그래픽과 함께 ..
Learn OpenGL - Getting started : Hello Triangle link : https://learnopengl.com/Getting-started/Hello-Triangle Hello Triangle OpenGL에서는 모든 것이 3D 공간에 있지만 화면과 창은 2D 픽셀 배열이므로 OpenGL의 많은 작업은 모든 3D 좌표를 화면에 맞는 2D 픽셀로 변환하는 것이라고 볼 수 있다. 3D 좌표를 2D 좌표로 변환하는 프로세스는 OpenGL의 그래픽 파이프라인에 의해 관리된다. 그래픽 파이프 라인은 크게 두 부분으로 나눌 수 있다. 첫 번째 부분은 3D 좌표를 2D 좌표로 변환하고, 두 번째 부분은 2D 좌표를 실제 색이 있는 픽셀로 변환하는 것이다. 이 튜토리얼에서는 그래픽 파이프 라인에 대해 간략히 논의하고 멋진 픽셀을 만드는데 어떻게 활용하는지에 대해 간략히 설명..
Learn OpenGL - Getting started : Hello Window link : https://learnopengl.com/Getting-started/Hello-Window Hello Window 우선 GLFW를 가동시킬 수 있는지 보자. .cpp파일을 생성하고 맨 위에 다음 include를 추가해라. #include #include GLFW를 포함시키기 전에 GLAD를 포함해야한다. GLAD용 헤더파일에는 (GL/gl.h)와 같은 OpenGL 헤더파일이 포함되어있기 때문이다.다음으로 main 함수를 작성한다. int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_..
Learn OpenGL - Getting started : Creating a Window link : https://learnopengl.com/Getting-started/Creating-a-window Creating a Window 멋진 그래픽을 만들기 위해 가장 먼저해야 할 일은 OpenGL Context와 그림을 그릴 Window 응용 프로그램을 만드는 것이다. 하지만 이러한 작업은 운영체제별로 다르며 OpenGL은 의도적으로 이러한 작업들을 추상화하려고 한다. 이것은 우리가 윈도우를 만들고, context를 정의하고, 사용자 입력을 모두 처리해야한다는 것을 의미한다. 다행히 이미 우리가 원하는 기능을 제공하는 라이브러리가 많다. 특히 OpenGL을 목표로 한 라이브러리도 있다. 이러한 라이브러리는 우리에게 모든 운영체제 관련 작업을 저장하고, 렌더링 할 창과 OpenGL conte..