본문 바로가기

개인공부/C++ Graphics

OpenGL #10 Texture

텍스쳐는 여러가지 사용방법이 있고 더 깊이 배우면 끝도 없지만 

일단은 png 파일을 들고와서 우리 직사각형에 입히는 작업을 해보자.

 

일단 stb_image.h 파일을 

https://raw.githubusercontent.com/nothings/stb/refs/heads/master/stb_image.h

 

여기서 받아온다.

 

이게 뭐냐고?

 

stb_image.h의 주요 역할

stb_image.h는 Sean Barrett가 작성한 stb 라이브러리의 일부로, 이미지를 간단히 로드할 수 있게 설계된 헤더 파일이다.

 

그냥 이미지들을 불러올수 있게하는 헤더파일이다. OpenGL 에는 자체적으로 이 기능이 없기에.

 

 

이후 Texture.h 를 만든다

 

 

 

 

이후 컨스트럭터

 

 

간단히 설명을 하면 코멘트에 나온대로 OpenGL 의 렌더링을 위해 사진을 뒤집어 줘야한다.

이후 stbi_load 함수를 이용해서 localBuffer 에 데이터를 저장후

바인드를 한다.

 

파라미터 설정은 제대로 못배워서... 일단 하라는대로했다.

모든 작업이 완료된후 메모리를 비워준다.

 

 

 

이후 바인드작업을 할때는 디폴트론 0 로 되어있지만 새로운 슬롯에 넣을때는 프로그래머가 넣을수있는데

말했듯이 32 개의 슬롯이 주로 있고 저렇게 추가해줄수 있도록 해놨다.

 

 

 

이후 쉐이더를 수정한다

Vertex Shader 

 

layout(location = 0) in vec4 position;   // 입력: 정점 위치
layout(location = 1) in vec2 texCoord;   // 입력: 정점 텍스처 좌표

out vec2 v_TexCoord;  // 출력: 프래그먼트 셰이더로 전달할 텍스처 좌표

void main()
{
   gl_Position = position;   // 정점의 위치를 화면에 출력
   v_TexCoord = texCoord;    // 텍스처 좌표를 다음 단계로 전달
};

 

 

Fragment Shader 

layout(location = 0) out vec4 color;   // 출력: 최종 픽셀 색상

in vec2 v_TexCoord;   // 입력: Vertex Shader에서 전달된 텍스처 좌표

uniform sampler2D u_Texture;   // 입력: 텍스처 데이터 (GPU에 업로드된 이미지)

void main()
{
   vec4 texColor = texture(u_Texture, v_TexCoord); // 텍스처 데이터를 텍스처 좌표로 샘플링
   color = texColor;  // 최종 색상으로 설정
};

 

 

정리하자면 Vertex Shader 에서 정점 위치와 텍스쳐 위치를 in 으로 main 함수에서 받아온후

v_TexCoord 라는 변수에 담아 out 을 이용해 Fragment Shader 로 보낸다.

이후 Fragment Shader 에서 in 으로 텍스쳐 좌표를 받은후 

Bind 를 이용해서 업로드된 u_Texture 의 rgba 값과 섞어서 texColor 라는 색으로 픽셀의 색들을 결정한다.

 

 

 

마지막으로 블렌딩까지 해주면

        GLCall(glEnable(GL_BLEND));
        GLCall(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); 

 

 

텍스쳐가 잘 붙어 나온다.

'개인공부 > C++ Graphics' 카테고리의 다른 글

OpenGL #12 Projection (1/3)  (0) 2025.01.16
OpenGL #11 Blending  (0) 2025.01.14
OpenGL #9 Renderer  (0) 2025.01.13
OpenGL (지금까지 내용)  (0) 2025.01.13
OpenGL #8 Vertex Arrays Object  (0) 2025.01.12