[c++] C++로의 그래픽 텍스처 매핑

텍스처 매핑은 3D 모델에 이미지를 입히는 기술로, 그래픽 애플리케이션에서 매우 중요한 기능입니다. C++로 OpenGL 또는 DirectX와 같은 그래픽 라이브러리를 사용하여 텍스처 매핑을 구현하는 방법에 대해 알아보겠습니다.

텍스처 로딩

텍스처를 매핑하기 전에 먼저 텍스처를 로딩해야 합니다. C++에서 텍스처를 로딩하는 데는 여러 가지 방법이 있지만, 가장 흔한 방법은 stb_image 라이브러리를 사용하는 것입니다. stb_image는 간단하고 효율적인 텍스처 로딩 라이브러리로, C++ 프로젝트에 쉽게 통합할 수 있습니다.

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

unsigned int texture;
int width, height, nrChannels;
unsigned char *data = stbi_load("texture.jpg", &width, &height, &nrChannels, 0);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(data);

위 코드는 texture.jpg 파일을 로딩하여 OpenGL 텍스처로 변환하는 과정을 보여줍니다.

텍스처 매핑

로딩한 텍스처를 실제 3D 모델에 매핑하는 방법은 각각의 그래픽 라이브러리에 따라 다르지만, 일반적으로 텍스처 좌표를 정의하고 이를 정점에 할당하여 구현합니다. 아래는 OpenGL을 사용하여 사각형에 텍스처를 매핑하는 예제 코드입니다.

float vertices[] = {
    // positions          // colors           // texture coords
    1.0f,  1.0f, 0.0f,   1.0f, 0.0f, 0.0f,   1.0f, 1.0f,   // top right
    1.0f, -1.0f, 0.0f,   0.0f, 1.0f, 0.0f,   1.0f, 0.0f,   // bottom right
   -1.0f, -1.0f, 0.0f,   0.0f, 0.0f, 1.0f,   0.0f, 0.0f,   // bottom left
   -1.0f,  1.0f, 0.0f,   1.0f, 1.0f, 0.0f,   0.0f, 1.0f    // top left
};
unsigned int indices[] = {
    0, 1, 3,   // first triangle
    1, 2, 3    // second triangle
};

위 코드는 각 정점마다 텍스처 좌표를 추가하여 사각형에 텍스처를 입히는 방법을 보여줍니다.

이처럼 C++로의 그래픽 텍스처 매핑은 텍스처 로딩과 매핑 단계로 나뉘며, 각각의 단계에서는 해당하는 그래픽 라이브러리의 API를 사용하여 텍스처를 처리합니다.