Scop 구현기 4편: Model 클래스
·
Dev/Grapics
전 편에서 Shader코드들을 분리해 클래스로 따로 만들었다이제는 기본. obj 파일을 파싱 해서 VAO와 VBO 그리고 정점들에 대한 데이터 들을 클래스 단위로 분리해 보자! Scop에서 가장 중요한 클래스가 아닐까 싶다1. 왜 Model 클래스를 도입했나?삼각형 그리기를 생각해 본다면 VAO, VBO, 위치 데이터, 셰이더 정보 등이 전부 흩어져 있다 이걸 하나로 묶지 않으면각 객체마다 VAO/VBO를 일일이 관리해야 하고draw 호출마다 셰이더 바인딩도 반복하고좌표, 색상, 메시 정보를 통합적으로 다루기 어렵다그래서 이 모든 "하나의 그릴 대상"을 감싸는 클래스를 만들게 된 것이다.2. Model 클래스는 어떤 책임을 가져야 할까?처음에는 단순히 "정점 데이터를 갖는 그릇" 정도로만 생각했다하지만 ..
Scop 구현기 2편: VAO와 VBO의 세계
·
Dev/Grapics
윈도우를 띄우는 것까지 했으니 이제 삼각형을 그려보겠습니다. 삼각형 그리기 전체 코드#include #include #include #include const char* vertexShaderSource = R"(#version 330 corelayout (location = 0) in vec3 aPos;void main() { gl_Position = vec4(aPos, 1.0);})";const char* fragmentShaderSource = R"(#version 330 coreout vec4 FragColor;void main() { FragColor = vec4(1.0, 0.5, 0.2, 1.0); // 주황색})";void processInput(GLFWwindow* window){ if (..
셰이더는 그낭 함수일까?
·
Dev/Grapics
GPU 프로그래밍의 착각과 진실1. 셰이더는 정말 함수일까?void main(){ gl_Position = ...;} 처음 GLSL 셰이더 코드를 보면 진짜 함수처럼 생겼다.C 언어와 똑같은 void main()에, 변수 선언, 수식, return 없이도 끝나는 심플한 구조까지. 그래서 흔히 이렇게 착각하곤 한다."아하, 셰이더도 함수니까 그냥 내가 부르면 되겠네?" 그런데 막상 실행해 보면 이상하다.main()을 딱 한 번 쓴 것 같은데, 화면 전체에 셰이더가 작동한다.어라? 내가 호출한 적 없는데? 그럼 셰이더는 대체 뭐지?그냥 함수처럼 보이는데.... 진짜 함수는 아닌 걸까?2. 셰이더란 무엇인가?셰이더는 GPU에서 실행되는 작은 프로그램이다.이 프로그램은 정점(Vertex), 픽셀(Fragm..
OpenGL의 좌표계, 진짜로 이해하기
·
Dev/Grapics
"왜 0, 0, 0에 두었는데 화면에 안 보일까? 1.  좌표계가 헷갈리는 이유OpenGL에서 처음 물체를 렌더링 할 때 이런 경험이 있다면 당신만 그런 게 아니다분명히 (0, 0, 0)에 모델을 뒀는데 화면에 아무것도 안 보인다.카메라는 설정했는데 방향이 어디를 보는지 감이 없다.gl_Position 계산했는데 화면이 시커멓다.이런 혼란의 원인은 대부분 좌표계와 변환에 대한 이해 부족이다.OpenGL에서의 렌더링은 단순한 그리기가 아니라,"모델의 좌표를 변환해 최종 스크린까지 도달시키는 여정"이다.2. 좌표계란 무엇인가?좌표계(Coordinate System)는 공간의 기준을 정의하는 약속이다.어디를 기준으로 (0, 0, 0)인지, 각 축이 어느 방향을 향하는지를 정의한다. OpenGL은 총 6단계의 ..
정점(Vertex)이란 무엇인가? - 그래픽 세계의 가장 작은 시작점
·
Dev/Grapics
1. 정점이라는 단어, 너무 자주 보인다컴퓨터 그래픽스를 막 시작하면 다음과 같은 단어들을 자주 보게 된다Vertex BufferVertex Shadergl_Positionlayout (location = x) 이 단어들은 모두 정점(Vertex)이라는 개념과 밀접하게 연결되어 있다.하지만 처음엔 너무 당연하다는 듯 쓰이기 때문에 "그래서... 정점이라는 게 도대체 뭐야?"라는 질문이 생기기 마련이다.2. 정점은 '점'이 아니다단어 뜻 그대로만 보면, 정점(Vertex)은 공간 위의 점 하나로 생각할 수 있다.하지만 그래픽에서의 정점은 단순한 위치 정보만 담고 있는 것이 아니다.정확히 말하자면, 정점은 '위치 + 속성 정보들'의 묶음이다. 예를 들어, 게임 캐릭터의 얼굴 한 지점은 단순히 (x,y,z) ..