Computer Graphics 110

OpenGL 정리 - 9. 백터와 행렬

선형 변환과 벡터, 행렬에 대한 기초선형 대수학의 핵심 개념인 벡터와 행렬에 대해 다시 정리해보겠다.학교에서 이미 배운 내용이지만, 리마인드 목적으로 기록해본다.컴퓨터 그래픽스에서 물체의 위치와 모양을 조작할 때 필수적인 개념이기 때문에 잘 알아두자.벡터(Vector)벡터는 크기와 방향을 갖는 값이다. 2D 또는 3D 공간에서 위치나 방향을 나타낼 때 많이 사용되며, 각 좌표값으로 표현된다. 벡터는 다양한 연산을 통해 선형 변환에 중요한 역할을 한다.벡터의 덧셈과 뺄셈은 같은 차원의 각 요소를 더하거나 빼는 방식으로 계산된다. 예를 들어, 두 벡터 (4, 2)와 (1, 3)의 덧셈은 (5, 5)가 된다. 스칼라곱은 벡터의 각 차원에 스칼라 값을 곱하여 계산되며, 벡터의 방향은 유지되면서 크기가 변화한다...

OpenGL 정리 - 8. Texture 사용 과정, 다중 Texture, Mipmap

이번 포스팅에서는 OpenGL에서 텍스처를 사용하는 방법에 대해 더 자세히 설명하겠다.텍스처는 3D 그래픽에서 물체의 표면에 이미지를 입혀 더욱 현실감 있는 렌더링을 가능하게 한다.이 글에서는 텍스처의 사용 과정과 다중 텍스처, 그리고 Mipmap에 대해 알아보겠다.텍스처 사용 과정OpenGL에서 텍스처를 사용하는 과정은 다음과 같다: 1. 텍스처 객체를 생성하기 위해 glGenTextures를 사용한다.이 함수는 텍스처 객체의 ID를 반환하며, 이 ID를 사용해 텍스처 작업을 수행한다.glGenTextures(1, &m_texture);  2. 생성한 텍스처 객체를 GL_TEXTURE_2D로 바인딩하여 이후의 모든 텍스처 작업이 해당 텍스처에 적용되도록 한다.glBindTexture(GL_TEXTURE..

OpenGL 정리 - 7. Texture 입히기

OpenGL에서 텍스처를 사용하는 방법에 대해 다뤄보겠다.텍스처는 3D 그래픽에서 물체의 표면에 이미지를 입혀 더 현실감 있는 렌더링을 가능하게 해준다. 1. 텍스처란?텍스처는 3D 물체에 이미지를 입히는 방식이다. 단순히 색상만 지정하는 것보다 더 사실적이고 복잡한 물체를 표현할 수 있다. 이를 통해 적은 수의 정점으로도 고품질의 렌더링을 할 수 있다.2. 텍스처 좌표 (Texture Coordinates)텍스처를 물체 표면에 입히기 위해서는 각 정점에 텍스처 좌표를 지정해야 한다. 텍스처 좌표는 [0, 1] 범위로 정규화된 좌표계이며, 텍스처 이미지의 좌하단을 (0, 0), 우상단을 (1, 1)으로 한다. 텍스처 좌표는 vertex attribute로 정점 셰이더에 전달되어 각 픽셀의 텍스처 좌표가 ..

OpenGL 정리 - 6. GLSL (OpenGL Shader Language)

이번에는 GLSL(OpenGL Shader Language)에 대해 배운 내용을 정리하겠다. GLSL은 OpenGL에서 그래픽을 처리하기 위해 셰이더 프로그램을 작성하는 데 사용되는 C 기반 언어이다. 이 포스팅에서는 GLSL의 기본 구조와 주요 개념, 사용 가능한 데이터 타입, 셰이더 입출력 방식에 대해 살펴보겠다.1. GLSL이란?GLSL: OpenGL에서 셰이더를 작성하기 위해 제공되는 언어로, GPU에서 동작하는 작은 프로그램을 작성하는 데 사용된다. 이러한 프로그램은 정점별, 픽셀별로 병렬 처리되어 높은 성능을 제공한다.대표적인 셰이더 언어:HLSL: DirectX용 셰이더 언어Metal: Metal API를 위한 셰이더 언어cg: nVidia가 제시한 셰이더 언어2. GLSL의 기본 구조GLS..

OpenGL 정리 - 5. context 클래스 추가 (OpenGL 초기화 및 렌더링 과정)

Class context이 클래스는 OpenGL 환경을 초기화하고, 셰이더 및 버퍼 객체를 생성하여 화면에 3D 객체를 렌더링하는 역할을 한다. Context 클래스는 OpenGL 그래픽 파이프라인의 설정과 렌더링 작업을 제어하며, 프로그램의 핵심적인 그래픽 처리 로직을 포함하고 있다.  Createstatic ContextUPtr Create(); 역할: Context 객체를 생성하고 초기화하는 역할을 한다. OpenGL을 초기화한 후, 초기화가 실패하면 nullptr을 반환하고, 성공 시 유효한 Context 객체를 반환한다.출력: 성공적으로 초기화된 Context 객체를 std::unique_ptr로 반환한다. Init bool Init();  역할: OpenGL의 주요 객체들을 초기화하고, 그래픽..

OpenGL 정리 - 4. shader, program 클래스 추가

Class shader이 클래스는 주로 셰이더 파일을 읽고, OpenGL에서 컴파일하는 과정을 포함한다. 각 함수의 역할과 사용되는 OpenGL 함수에 대해 정리해 보았다.  CreateFromFile static ShaderUPtr CreateFromFile(const std::string& filename, GLenum shaderType); 역할: 주어진 파일에서 셰이더 코드를 읽어와 OpenGL 셰이더 객체를 생성한다.입력:filename: 셰이더 소스 코드가 담긴 파일 이름.shaderType: 셰이더의 타입(GL_VERTEX_SHADER, GL_FRAGMENT_SHADER 등).출력: 셰이더 객체를 가리키는 std::unique_ptr 타입의 객체를 반환한다. 셰이더 로드 및 컴파일에 실패하면..

OpenGL 정리 - 3. 프로그래머블 셰이더(Programmable Shader)

강의에서는 간단하게만 설명 되었지만 일단 알아두면 좋은 개념일 거 같아 검색하여 기록한다. 프로그래머블 셰이더(Programmable Shader)는 GPU에서 실행되는 작은 프로그램으로, 그래픽 파이프라인의 특정 단계를 프로그래머가 제어할 수 있게 해준다. 초기의 그래픽 파이프라인은 고정 기능 파이프라인(Fixed-Function Pipeline)이라 불리며, 하드웨어에서 미리 정의된 방식으로만 그래픽 처리 작업을 수행했으나, 프로그래머블 셰이더를 통해 그래픽 연산의 유연성과 효율성을 극대화할 수 있게 되었다.1. 셰이더의 기본 개념셰이더는 주로 그래픽 렌더링 과정에서 색상, 조명, 텍스처, 변환 등을 처리하는 데 사용된다. 프로그래머는 이 셰이더를 통해 GPU에서 직접적인 그래픽 연산을 제어할 수 있..

OpenGL 정리 - 2. GLFW와 GLAD, Double Buffering

GLFW (Graphics Library Framework)GLFW는 OpenGL과 같은 그래픽 API에서 사용할 수 있는 창 관리 및 입력 처리 라이브러리이다. OpenGL 컨텍스트를 생성하고, 창을 띄우거나, 키보드 및 마우스 입력을 처리하는 데 매우 유용하다. 또한, 다중 모니터 지원, Vulkan API 지원 등 다양한 기능을 제공한다. 이 라이브러리를 사용하면 복잡한 플랫폼 종속 코드를 작성하지 않아도 쉽게 창을 생성하고 이벤트를 처리할 수 있다.주요 기능: 창 생성, OpenGL 컨텍스트 관리, 입력 처리 (키보드, 마우스), 다중 모니터 지원사용 예시: OpenGL 컨텍스트를 생성하고, 창 크기를 변경하거나 키보드 입력 이벤트를 처리하는 콜백 함수 등록GLAD (OpenGL Loader Ge..

OpenGL 정리 - 1. CMake 사용

1주차 강의는 OpenGL 이란 무엇인가와 초기 세팅만 알려주셨다.정리 할 거리는 딱히 없고CMake는 처음 써봐서 돌리는 법만 정리일단 CMake는 크로스 플랫폼 빌드 시스템으로, 여러 컴파일러와 플랫폼에서 프로젝트를 쉽게 관리하고 빌드할 수 있게 해주는 도구이다. 간단히 말해, CMake를 사용하면 다양한 플랫폼(윈도우, 리눅스, 맥)에서 동일한 프로젝트를 쉽게 빌드할 수 있으며, 윈도우에서는 Visual Studio 솔루션 파일을, 리눅스에서는 Makefile을 생성할 수 있어 유용하다.사용 방법은 간단하다. CMakeLists.txt라는 설정 파일을 작성하고, 여기서 소스 파일, 라이브러리, 빌드 옵션 등을 정의한다. 그 후 cmake 명령어를 실행하면 CMake가 해당 플랫폼에 맞는 빌드 파일을..

OpenGL 정리 - 0.

OpenGL 공부하려고 책을 사야하나 강의를 찾아야하나유튜브에 좋은 한국어 OpenGL 강의가 있다 친구가 추천해줘서강의를 들으면서 기록할 거 기록하려한다. https://www.youtube.com/@rinthel/featured Rinthel Kwon www.youtube.com 강원대학교 권지용 교수님의 강의고 팬데믹때 강의를 하시기위해 유튜브에 올리신 거를 공개해주신거 같다.감사합니다. 교수님  https://github.com/ksro0128/OpenglTuto GitHub - ksro0128/OpenglTutoContribute to ksro0128/OpenglTuto development by creating an account on GitHub.github.com여기에 강의를 따라가는 코드..