OpenGL 5

OpenGL 공부하기 #4 - 행렬과 변환

1. glm 라이브러리 기본GLM (OpenGL Mathematics)은 GLSL과 유사한 문법을 사용하는 수학 라이브러리#include #include 2. Transformations의 종류Translation (이동)glm::mat4 model = glm::mat4(1.0f);model = glm::translate(model, glm::vec3(x, y, z));객체를 x, y, z 방향으로 이동시킴보통 model 행렬에서 사용Scaling (크기 조절)model = glm::scale(model, glm::vec3(sx, sy, sz));비율로 객체를 확대/축소균일 스케일: glm::vec3(s, s, s)Rotation (회전)model = glm::rotate(model, glm::radi..

OpenGL 2025.07.14

OpenGL 개발하기 - Sierpinski Triangle

재귀함수를 이용해 시에르핀스키 삼각형을 그리는 코드원래 효율적으로 그리기 위해서는 재귀함수에 glDrawElements를 하지 않고 vector타입을 이용해 vertices에 정점을 더해가며 재귀가 마친 후에 VBO에 한번에 넣는 방식이다하지만 그려보는 것이 목적이었기에 단순한 방식을 채택했다#include #include #include #include #include #include #include "Shader.h"#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"float vertices[] = {// positions // colors // texture coords1.0f, 1.0f, 0.0f, 1.0f, 0..

OpenGL 2025.07.14

OpenGL 공부하기 #3 - VAO, VBO, EBO

VAO (Vertex Array Object)정점의 속성 구조를 저장하는 객체임버텍스를 어떻게 해석할지 정의함 ex. 첫 3개 float은 xyz, 4번째부터 3개 flaot은 색상값 등glGenVertexArrays()로 생성함glBindVertexArray()로 바인딩 후 설정 저장 및 사용 가능여러 VAO 생성하여 각각 다른 설정 가능VBO (Vertex Buffer Object)실제 정점 데이터를 GPU에 저장함glGenBuffers()로 생성함glBindBuffer(GL_ARRAY_BUFFER, id)로 바인딩함glBufferData()로 버텍스 데이터 전송함 (데이터 복사 후 삽입)GL_STATIC_DRAW → 자주 바뀌지 않는 데이터에 사용함float vertices[] = { x, y..

OpenGL 2025.07.05

OpenGL 공부하기 #2 - 그래픽스 파이프라인

Vertex Input정점에 대한 버퍼 정보를 GPU로 넘김Vertex Shader정점들의 위치를 변환함정점들은 로컬좌표 기준으로 저장되어 있기 때문에 공간좌표계로 변환해야함로컬좌표 -> Model Matrix -> 월드 좌표 -> View Matrix -> 카메라 좌표 -> Projection Matrix -> 클립 좌표순서로 변환됨Tessellation Shader더 많은 정점 및 폴리곤을 만들어 GPU에서 곡면이나 디테일을 추가하는 쉐이더Tessellation Control Shader정정과 정점 사이를 얼마나 쪼갤지 정함Tessellation Evaluation Shader쪼개진 점들의 위치를 계산함Geometry Shader정점들을 새로 생성하거나 제거함Primitive Assembly정점들을 ..

OpenGL 2025.06.28

OpenGL 공부하기 #1 - 윈도우 생성

그래픽스 파이프라인과 3D 공간에 대해 이해하는 것을 우선으로 진행하는 시리즈입니다.첫번째 목표는 "FBX 로더 구현해보기"입니다.다뤄지는 내용은 대부분 https://learnopengl.com/ 을 기반으로 학습합니다.OpenGL은 거대한 스테이트 머신따라서 Context가 존재Context는 렌더링을 위한 모든 정보를 담고 있는 데이터 구조Context는 여러개 생성하여 병렬로 사용 가능OpenGL을 사용하기 위한 세팅2개의 라이브러리가 필요함glfw: 기본적인 윈도우와 이벤트에 대한 것glad: opengl함수를 사용할 수 있도록하는 것glfw 함수glfwinit();glfw를 초기화하는 함수초기화 이후에만 사용 가능glfwWindowHint(int hint, int value);window와 c..

OpenGL 2025.06.24