목록그래픽 (29)
게임공장
좌표 시스템 시작하기/좌표 시스템 마지막 강좌에서 변환 행렬을 사용하여 모든 vertex들을 변환함으로써 수학을 잘 활용하는 방법을 배웠습니다. OpenGL읜 각 vertext shader 실행 된 후 우리가 그리기 원하는 모든 vertex들이 정규화된 디바이스 좌표로 표시되기를 원합니다. 즉, 각 vertex의 x, y, z 좌표가 -1.0 ~ 1.0 범위 안에 있어야 합니다. 이 범위 밖의 좌표는 보이지 않게됩니다. 일반적으로 우리가 직접 구성한 범위의 좌표를 지정하고 vertex shader에서 이 좌표들을 NDC로 변환합니다. 그런 다음 이 NDC 좌표들은 rasterizer에게 보내지고 화면위의 2D 좌표/픽셀로 변홥됩니다. NDC로 좌표를 변환한 다음 스크린 좌표로 변환하는 것은 일반적으로 최..
변환(Transformations) 시작하기/변환(Transformations) 우리는 이제 오브젝트를 생성하고 컬러를 입히고 텍스처를 이용하여 세밀하게 표현하는 방법을 알고 있지만 정적인 오브젝트이기 때문에 여전히 흥미롭지 못합니다. 각 프레임에서 그들의 vertex를 수정하고 버퍼를 재구성하여 움직이게 해볼 것입니다. 하지만 이는 번거롭고 프로세싱 파워를 꽤 많이 요구합니다. 오브젝트를 변환(transform) 하는 방법에는 좋은 방법들이 있습니다. 이는 (여러개의) 행렬(matrix) 객체들을 사용하는 방법입니다. 행렬은 아주 강력한 수학적 개념입니다. 처음에 보기에는 어려워보이지만 일단 익숙해지면 아주 유용하게 사용할 수 있습니다. 행렬을 다룰 때 우리는 약간의 수학적 개념들을 알아야하고 수학적 ..
Textures 시작하기/Textures 객체에 더 많은 상세사항을 추가하기 위해 각 vertex에 컬러를 사용하여 흥미로운 이미지를 만들 수 있음을 배웠습니다. 하지만 사실적인 느낌을 얻기 위해서는 많은 vertex를 가져야 하므로 많은 색상을 지정해야 합니다. 각 모델에는 더 많은 vertex들이 필요하고 각 vertex는 컬러 attriubute를 필요로 하기 때문에 상당한 오버헤드를 야기시킵니다. 아티스트와 프로그래머가 일반적으로 선호하는 것은 텍스처(texture)를 사용하는 것입니다. 텍스처는 오브젝트에 세부 정보를 추가하는 데에 사용되는 2D Image(1D, 3D 텍스처도 존재합니다)입니다. 예를 들어 멋있는 벽돌 이미지가 있는 종이 조각처럼 여러분의 3D 집에 텍스처를 깔끔하게 접어서 집..
Shaders 시작하기/Shaders Hello Triangle 강좌에서 언급했듯이 shader는 GPU에서 동작하는 작은 프로그램입니다. 이 프로그램들은 그래픽 파이프라인의 특정 부분을 각자 맡아서 실행합니다. 기본적인 의미에서 shader는 입력값을 출력값으로 변환시키는 프로그램 그 이상도 이하도 아닙니다. 또한 shader는 아주 독립적인 프로그램이기 때문에 서로 의사소통할 수 없습니다. 유일한 의사소통은 그들의 입력값과 출력값을 통해서 하는 것뿐입니다. 이전의 강좌에서 shader를 간단히 알아보았고 그들을 적절히 사용하는 방법을 알아보았습니다. 우리는 이제 shader에 대해 설명하고 특히 OpenGL Shading Language에 대해서 보다 일반적인 방식으로 설명할 것입니다. GLSL Sh..
Hello Triangle 시작하기/Hello Triangle OpenGL에서 모든 것은 3D 공간 안에 있습니다. 하지만 화면과 윈도우 창은 2차원 픽셀 배열입니다. 그렇기에 OpenGL 작업의 큰 부분을 차지하는 것은 모든 3D 좌표를 화면에 맞게 2D 픽셀로 변환하는 작업입니다. 3D 좌표를 2D 좌표로 변환하는 작업은 OpenGL의 그래픽 파이프라인(graphics pipeline) 에 의해 관리됩니다. 그래픽 파이프라인은 크게 두 개의 부분으로 나뉠 수 있습니다: 하나는 3D 좌표를 2D 좌표로 변환하는 것이고 다른 하나는 2D 좌표를 실제 색이 들어간 픽셀로 변환하는 것입니다. 이 강좌에서는 그래픽 파이프라인과 멋진 픽셀을 만들기 위해 그래픽 파이프라인을 어떻게 사용해야 하는지에 대해 간단히 ..
Hello Window 시작하기/Hello Window 우리가 GLFW를 가동시킬 수 있는지 봅시다. 먼저 .cpp 파일을 만들고 새로 만든 파일의 맨 위에 다음 include를 추가합니다. #include #include GLFW 전에 먼저 GLAD를 포함시켜야 합니다. GLAD 용 헤더파일에는 (GL/gl.h)와 같은 OpenGL 헤더파일이 포함되어 있으므로 OpenGL을 필요로 하는 다른 헤더파일보다 먼저 GLAD를 포함시켜야 합니다. 다음으로 GLFW 창을 인스턴스화 할 main 함수를 만듭니다. int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR..
Window 생성 시작하기/Window 생성 멋진 그래픽을 만들기 위해 우리가 해야 할 첫 번째 일은 OpenGL context와 안에 그림을 그릴 Window를 만드는 것입니다. 하지만 이러한 작업은 운영체제별로 다르며 OpenGL은 이러한 작업들을 추상화하려고 합니다. 이는 우리가 직접 윈도우를 만들고, 컨텍스트를 정의, 사용자 입력을 모두 처리해야 한다는 것을 의미합니다. 다행히 이미 우리가 원하는 기능을 제공하는 라이브러리가 많이 있습니다. 특히 OpenGL을 목표로 한 라이브러리도 있습니다. 이러한 라이브러리는 우리에게 모든 운영체제 관련 작업에 관한 정보를 제공하고 렌더링할 Window와 OpenGL context를 제공하여 줍니다. 가장 많이 쓰이는 라이브러리는 GLUT, SDL, SFML,..
소개 소개 당신이 여기에 왔을 때 당신은 아마 컴퓨터 그래픽의 내부 동작을 배우고 차가운 아이들이 하는 모든 것을 스스로 하고 싶을 것입니다. 스스로 하는 일은 매우 재미있고 유익하며 그래픽 프로그래밍에 대해 잘 이해할 수 있습니다. 하지만 시작하기 전에 고려해야 할 몇가지 항목이 있습니다. 전제 조건 OpenGL은 그래픽 API이며 자체 플랫폼이 아니기 때문에 언어가 쓰여야 하며 선택한 언어는 C++입니다. 그러므로 이 강좌에서는 C++ 프로그래밍 언어에 대한 지식이 필요합니다. 하지만 필요한 경우 C++ 고급 내용을 포함하여 사용된 대부분의 개념을 설명하므로 C++ 전문가가 아니어도 되지만 'Hello World' 프로그램 정도는 작성할 수 있어야 합니다. C++ 에 대한 많은 경험이 없다면 www...
OpenGL 시작하기/OpenGL 시작하기 전에 먼저 OpenGL이란 무엇인지 알아야 합니다. OpenGL은 그래픽 및 이미지를 조작하는 데 사용할 수 있는 많은 기능들을 제공하는 API(Application Programming Interface)라고 볼 수 있습니다. 하지만 OpenGL 자체는 API가 아니라 Khronos Group이 개발하고 유지 관리하는 설명서입니다. OpenGL 설명서는 각 함수의 출력이 무엇이고 어떻게 수행되어야 하는지를 정의합니다. 이 설명서를 구현(implementing)하는 개발자는 해당 함수가 어떻게 작동해야하는지에 대한 솔루션을 제시해야 합니다. OpenGL 설명서는 구현 세부 사항을 제공하지 않으므로 OpenGL의 실제 개발 된 버전은 함수의 구현이 다를 수 있습니..