NeHe의 텍스처 매핑 튜토리얼을 보고 있습니다 . 텍스처를로드하기에는 지나치게 복잡해 보입니다.
SFML에 텍스처를로드 한 다음 Open GL에서 사용하는 방법이 있습니까? 나는 창에 SFML을 사용합니다.
NeHe의 텍스처 매핑 튜토리얼을 보고 있습니다 . 텍스처를로드하기에는 지나치게 복잡해 보입니다.
SFML에 텍스처를로드 한 다음 Open GL에서 사용하는 방법이 있습니까? 나는 창에 SFML을 사용합니다.
답변:
빠른 것은 무료로 제공되고 쉬운 것은 어려운 OpenGL에 오신 것을 환영합니다.
샘플이 길고 복잡하다고 생각했다면, "텍스처를로드하기위한 것"인데 아직 아무것도 보지 못했습니다. DDS 텍스처로드, HDR 텍스처 처리, 큐브 맵 지원, 텍스처 렌더링 등이 필요할 때까지 기다리십시오.
OpenGL에서 텍스처로드는 두 가지 구성 요소로 구성됩니다.
이미지 형식에서 데이터 가져 오기 파일에서 텍스처를로드하거나 절차 적으로 생성 할 수 있습니다. 멋진 색상 정보 배열로 끝나는 한 중요하지 않습니다.
비디오 카드에 데이터를 넣습니다. 데이터는 시스템 RAM에서 비디오 RAM으로 이동해야합니다.
SFML에는 표준 이미지 로더가 제공되므로 첫 번째 부분은 쉬워야합니다.
sf::Image img_data;
if (!img_data.LoadFromFile("images/avatar.png"))
{
LOG_ERROR("Could not load '%s'.", "images/avatar.png");
return false;
}
다음으로 OpenGL 텍스처 오브젝트를 생성해야합니다.
GLuint texture_handle;
glGenTextures(1, &texture_handle);
텍스처 바인딩에 대한 여러 가지 선택이 있습니다. 세 가지 주요 유형 인 1D, 2D 및 3D가 있으며 큐브 맵 (+ X, -X, + Y, -Y, + Z, -Z)을 지원합니다. 그러나 99 %의 경우 2D 텍스처가 필요합니다.
glBindTexture(GL_TEXTURE_2D, texture_handle);
이제 우리는 흥미로운 부분에 도달합니다. 데이터를 비디오 카드에 업로드합시다.
glTexImage2D(
GL_TEXTURE_2D, 0, GL_RGBA,
img_data.GetWidth(), img_data.GetHeight(),
0,
GL_RGBA, GL_UNSIGNED_BYTE, img_data.GetPixelsPtr()
);
마지막으로 많은 텍스처 매개 변수를 설정할 수 있습니다. 이 질문에 대한 답은 : (0.0, 1.0) 범위를 벗어난 텍스처 좌표를 사용하면 어떻게됩니까? 우리는 포장 GL_REPEAT
하거나 ( ) 아니면 아무것도하지 GL_CLAMP
않습니까 ( )? 텍스처에 선형 보간을 사용하려는 비디오 카드를 설명하는 데 사용할 수도 있습니다.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
이제 텍스처를 사용하여 텍스처를 바인딩 glBindTexture
하고 텍스처 메시를 그릴 수 있습니다.
glEnable(GL_TEXTURE2D);
초기화 기능을 넣어보십시오 .
SFML 2.0+를 사용하면 텍스쳐를 더 쉽게로드 할 수 있습니다.
sf::Texture texLid;
std::string image2="images/top.jpg";
if (!texLid.loadFromFile(image2))
{
std::cout << "Could not load" << image2;
char c;
std::cin>>c;
return false;
}
glEnable(GL_TEXTURE_2D);//tell OpenGL to use textures when drawing
sf::Texture::bind(&texLid);//select this texture for OpenGL rendering