본문 바로가기

분류 전체보기13

[Learn OpenGL] Shaders - 2 Uniforms 유니폼은 CPU에 있는 우리의 애플리케이션에서 GPU의 쉐이더로 데이터를 전달하는 또 다른 방법입니다. 하지만 유니폼은 정점 속성과는 약간 다릅니다. 먼저, 유니폼은 전역적입니다. 전역적이라는 것은 유니폼 변수가 쉐이더 프로그램 객체마다 고유하며, 쉐이더 프로그램의 어떤 단계에서든 어떤 쉐이더에서든 접근할 수 있다는 뜻입니다. 둘째, 어떤 값을 유니폼 값으로 설정하든, 유니폼은 리셋되거나 업데이트될 때까지 그 값을 유지합니다. GLSL에서 유니폼을 선언하려면 타입과 이름이 있는 쉐이더에 유니폼 키워드를 간단히 추가합니다. 그 후로는 쉐이더에서 새로 선언된 유니폼을 사용할 수 있습니다. 이번에는 삼각형의 색상을 유니폼을 통해 설정해 보겠습니다. #version 330 core out vec.. 2023. 11. 18.
[Learn OpenGL] Shaders - 1 쉐이더는 GPU에 존재하는 작은 프로그램들로, 그래픽 파이프라인의 특정 부분마다 실행됩니다. 기본적으로, 쉐이더는 입력을 출력으로 변환하는 프로그램에 불과합니다. 쉐이더는 서로 통신할 수 없는 매우 독립적인 프로그램이며, 입력과 출력을 통해서만 통신할 수 있습니다. 이전 장에서 우리는 쉐이더와 그 사용 방법에 대해 간단히 다루었습니다. 이제 쉐이더, 특히 OpenGL Shading Language에 대해 좀 더 일반적으로 설명하겠습니다. GLSL 쉐이더는 C와 유사한 언어인 GLSL로 작성됩니다. GLSL은 그래픽용으로 제작되었으며 벡터와 행렬 조작에 특화된 유용한 기능을 포함하고 있습니다. 쉐이더는 항상 버전 선언으로 시작한 후, 입력 및 출력 변수, 유니폼 및 메인 함수의 목록이 이어집니다. 각 쉐이.. 2023. 11. 18.
[Learn OpenGL] Hello Triangle - 4 Element Buffer Objects 정점을 렌더링할 때 논의할 마지막 사항은 Element Buffer Object 입니다. EBO가 어떻게 작동하는지 설명하기 위해 예를 들어보겠습니다. 삼각형 대시 사각형을 그리고 싶다고 가정해 봅시다. OpenGL은 주로 삼각형을 사용하기 때문에, 두 개의 삼각형을 사용하여 사각형을 그릴 수 있습니다. 이렇게 하면 다음과 같은 정점 집합이 생성됩니다. float vertices[] = { // 첫 번째 삼각형 0.5f, 0.5f, 0.0f, // 오른쪽 상단 0.5f, -0.5f, 0.0f, // 오른쪽 하단 -0.5f, 0.5f, 0.0f, // 왼쪽 상단 // 두 번째 삼각형 0.5f, -0.5f, 0.0f, // 오른쪽 하단 -0.5f, -0.5f, 0.0.. 2023. 11. 18.
[Learn OpenGL] Hello Triangle - 3 정점 셰이더는 정점 속성의 형태로 원하는 입력을 지정할 수 있게 해주며, 이는 큰 유연성을 제공하지만, 입력 데이터의 어떤 부분이 정점 셰이더의 어떤 정점 속성으로 가야 하는지 수동으로 지정해야 한다는 것을 의미합니다. 즉, 렌더링하기 전에 OpenGL이 정점 데이터를 어떻게 해석해야 하는지 지정해야 합니다. 우리의 정점 버퍼 데이터는 다음과 같이 구성됩니다 위치 데이터는 32비트(4바이트) 부동 소수점 값으로 저장됩니다. 각 위치는 이러한 값 3개로 구성됩니다. 3개 값 각각 사이에는 공간(또는 다른 값)이 없습니다. 값들은 배열에 밀집되어 있습니다. 데이터의 첫 번째 값은 버퍼의 시작 부분에 있습니다. 이 지식을 바탕으로, 우리는 OpenGL에게 glVertexAttribPointer를 사용하여 정점.. 2023. 11. 17.