텍스쳐는 여러가지 사용방법이 있고 더 깊이 배우면 끝도 없지만
일단은 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 |