OpenGL 11

[최신 OpenGL 시작하기 #1_10] 카메라 (Camera)

이전 좌표계는 8챕터로 지금은 9가 맞지만, 개정 이슈로 10으로 표시합니다.10. 카메라 (Camera)이전 챕터에서 우리는 뷰 행렬과 이를 사용하여 장면을 이동하는 방법에 대해 논의했습니다(우리는 약간 뒤로 이동했습니다). OpenGL 자체는 카메라라는 개념에 익숙하지 않지만, 모든 물체를 반대 방향으로 이동시켜 마치 우리가 움직이는 것처럼 보이게 할 수 있습니다. 이 챕터에서는 OpenGL에서 카메라를 설정하는 방법을 알아볼 것입니다. 3D 장면에서 자유롭게 움직일 수 있는 비행 스타일 카메라에 대해 논의할 것입니다. 또한 키보드와 마우스 입력에 대해 논의하고 마지막으로 커스텀 카메라 클래스를 만들어 볼 것입니다.10.1 카메라/뷰 공간 (Camera/View space)카메라/뷰 공간에 대해 이야..

[최신 OpenGL 시작하기 #1_8] 좌표계 (Coordinate Systems)

1.좌표계(Coordinate Systems)지난 장에서 우리는 행렬을 이용하여 변환 행렬로 모든 정점을 변환하는 방법을 배웠습니다. OpenGL은 모든 정점이 정규화된 장치 좌표(Normalized Device Coordinates)로 처리되기를 기대합니다. 즉, 각 정점 셰이더가 실행된 후 모든 정점의 x, y, z 좌표는 -1.0에서 1.0 사이의 값이어야 합니다. 이 범위를 벗어난 좌표는 화면에 표시되지 않습니다. 일반적으로 우리는 좌표를 직접 정한 범위(또는 공간)에서 지정한 다음, 정점 셰이더에서 이 좌표들을 정규화된 장치 좌표(NDC)로 변환합니다. 이러한 NDC는 래스터라이저(rasterizer)에 전달되어 화면의 2D 좌표/픽셀로 변환됩니다. 좌표를 NDC로 변환하는 작업은 일반적으로 단..

[최신 OpenGL 시작하기 #1_7] 변환 (Transformation)

이전 시간에 Texture에 이어서 변환(Transformation)을 배워 보겠습니다.변환(Transformations)이전 시간까지 객체를 생성하고, 색상을 입히거나 텍스처를 사용하여 세부적인 외관을 설정했지만, 정적 객체라는 한계가 있습니다. 동적으로 매 프레임마다 정점을 변경하고 버퍼를 재구성하여 움직이게 할 수 있지만, 코드가 너무 길어집니다. 객체를 변환하는 훨씬 더 좋은 방법이 있는데, 바로 행렬 객체(martrix objects)를 사용하는 것입니다. 행렬은 처음에는 무섭게 보이지만, 익숙해지면 매우 유용한 이론인데요. 행렬에 대해 논의할 때, 우리는 약간의 수학에 빠져들어야 하며, 수학적으로 더 관심 있는 독자들을 위해 추가 자료도 첨부할 것입니다. 그러나 변환을 완전히 이해하기 위해서는..

[최신 OpenGL 시작하기 #1_6] 텍스처 학습 (Texture)

텍스처(Textures)이전 장에서 객체에 세부 사항을 추가하기 위해 각 vertex에 색상을 사용하여 흥미로운 이미지를 만들 수 있다는 것을 배웠습니다. 하지만 좀더 Reality를 추구하려면 많은 vertex가 필요하고 각 vertex마다 색상 attribute(속성)도 필요합니다. 이는 각 모델에 더 많은 vertex가 필요하고 각 vertex마다 색상 attribute도 필요하기 때문에 상당한 추가 오버헤드가 발생합니다. 아티스트와 프로그래머들은 일반적으로 texture를 사용하는 것을 선호합니다. Texture는 객체에 세부 사항을 추가하는 데 사용되는 2D 이미지(1D 및 3D texture도 존재)입니다. Texture를 예를 들어 멋진 벽돌 이미지가 있는 종이 조각이라고 생각하면, 이 종이..

[최신 OpenGL 시작하기 #1_5] 셰이더 기초 (Shader)

Shader이전 장에 삼각형 만들기에서 언급했듯이, shader는 GPU에 존재하는 작은 프로그램입니다. 이 프로그램들은 graphics pipeline의 특정 부분에서 실행됩니다. 기본적으로 shader는 input을 output으로 변환하는 프로그램에 불과합니다. 그러므로 Shader 간 유일한 통신은 input과 output을 통해서만 이루어집니다. 이번 장에서는 OpenGL Shading Language에 대해 좀 더 일반적인 방식으로 설명하겠습니다.GLSLShader는 C와 유사한 언어인 GLSL로 작성됩니다. GLSL은 그래픽 사용에 맞게 조정되었으며 vector 및 matrix 조작에 특화된 유용한 기능을 포함하고 있습니다. Shader는 항상 버전 선언으로 시작하며, 그 다음에 input ..

[최신 OpenGL 시작하기 #1_4] 삼각형 만들기 (Hellow Triangle)

Hello TriangleOpenGL은 3D공간에서 모든 것이 표현되지만, 우리가 보고 있는 Screen과 창은  2D이기 때문에 3D좌표를 2D 픽셀로 변환해야 됩니다. 3D 좌표를 2D 픽셀로 변환하는 작업은 OpenGL에 graphics pipeline(그래픽 파이프라인)에서 관리됩니다. graphics pipeline은 크게 2가지 분류로 나눌수 있는데 첫째는 3D좌표를 2D좌표로 변환이고, 둘째는 2D좌표의 실제 컬러픽셀로 변환하는 것입니다. 이번 포스팅에서는 graphics pipeline를 설명하고, 어떻게 하면 멋진 픽셀로 사용할 수 있는지를 다룰 것입니다. Graphics pipeline은 3D 좌표 집합을 입력으로 받아 이를 화면의 색상 있는 2D 픽셀로 변환합니다.  Graphics ..

[최신OpenGL 시작하기 #1_3] Hellow Window

들어가기 앞서서이전 시간에 GLFW, glad 관련 환경 설정을 해주었다면, 솔루션 탐색기 > 모든 항목 표시 를 누르면, 빨간색으로 포함이 안된것을 볼수 있습니다. 이경우 디렉토리 우클릭 > 프로젝트에 포함 버튼을 누르면 해결 가능합니다.창 만들기 (Hellow Window)GLFW를 실행해 봅시다. 먼저, .cpp 파일을 생성하고 다음 include 문을 파일 상단에 추가하세요.#include #include GLAD를 GLFW보다 먼저 포함해야 합니다. GLAD의 include 파일은 필요한 OpenGL 헤더(GL/gl.h와 같은)를 내부적으로 포함하므로, GLAD를 OpenGL이 필요한 다른 헤더 파일(GLFW 같은) 전에 포함해야 합니다. 다음으로, GLFW 창을 인스턴스화할 main 함수를 생..

[최신OpenGL 시작하기 #1_2] Window 창 만들기 (개발 환경 설정)

윈도우 생성하기OpenGL에서 멋진 그래픽을 만들기 전에 가장 먼저 해야 할 일은 OpenGL 컨텍스트와 그림을 그릴 애플리케이션 창을 생성하는 것입니다. 하지만 이러한 작업들은 운영체제별로 다르며, OpenGL은 의도적으로 이러한 작업들로부터 자신을 추상화하려고 합니다. 즉, Window을 생성하고, Context(상태 모음)를 정의하며, User input을 핸들링 등 모든 것을 우리 스스로 해야 합니다. 다행히 우리가 필요로 하는 기능을 제공하는 여러 라이브러리들이 있으며, 일부는 OpenGL에 특화되어 있습니다. 이러한 라이브러리들은 운영체제별 작업을 모두 처리해주고 렌더링할 수 있는 창과 OpenGL 컨텍스트를 제공합니다. 인기 있는 라이브러리로는 GLUT, SDL, SFML, GLFW 등이 있..

[최신OpenGL 시작하기#1_1] OpenGL 이란 ?

OpenGL이란 ?OpenGL은 주로 그래픽과 이미지를 조작하는 데 사용할 수 있는 다양한 함수를 제공하는 API(응용 프로그램 인터페이스)로 간주됩니다. 그러나 OpenGL 자체는 API가 아니라 Khronos Group에서 개발하고 유지 관리하는 단순한 스펙(specification)입니다.OpenGL 스펙은 각 함수의 결과/출력이 어떻게 실행되고 어떻게 작동해야 하는지를 정확히 명시합니다. 이 사양을 구현하는 개발자들은 이 함수가 어떻게 작동해야 하는지에 대한 해결책을 찾아내야 합니다. OpenGL 스펙은 따로 세부 사항을 제공하지 않기 때문에 실제 개발된 OpenGL 버전은 결과가 사양을 준수하는 한 다른 구현을 가질 수 있습니다.실제 OpenGL 라이브러리를 개발하는 사람들은 보통 그래픽카드 제..

[최신OpenGL 소개#0] 소개(Introduction)

OpenGL 학습 시작하기computer graphics의 내부 작동 방식을 배우고 멋진 일들을 직접 해보고 싶으실 겁니다.직접코딩 하는것은 graphics programming에 대한 깊은 이해를 제공합니다.하지만 여정을 시작하기 전에 고려해야 할 몇 가지 사항이 있습니다.사전 지식OpenGL은 독립적인 플랫폼이 아닌 graphics API이기 때문에 작동할 언어가 필요하며, 그 선택된 언어는 C++입니다. 따라서 이 챕터들을 위해서는 C++ 프로그래밍 언어에 대한 적절한 지식이 필요합니다. 하지만 필요한 경우 고급 C++ 주제를 포함하여 사용되는 대부분의 개념을 설명하려고 노력할 것이므로, C++ 전문가가 될 필요는 없지만 'Hello World' 프로그램 이상을 작성할 수 있어야 합니다. C++에 ..