0
나는이 것을 알아 내려고 노력했다. skybox를 만들려고 노력하고 있지만 어떤 이유로 든 내 큐브 맵은 항상 검은 색입니다. 프래그먼트 쉐이더에서 vec4 (1.0f)와 같은 출력 색상 값을 넣으면 내 큐브가 흰색으로 변하는 것을 볼 수 있습니다. 어느 날 이미지 로딩이 될지도 모른다고 생각했지만 이미지를 잘 읽었습니다. 나는 바보가되어 뭔가를 놓치고 있다고 확신한다.쉐이더를 사용하여 검정 큐브를지도 C++
큐브 맵을 렌더링 SDL_image
void LoadCubeMapFace(const std::string& filename, GLenum face)
{
SDL_Surface *imageSurface = IMG_Load((TEXTURE_PATH + filename).c_str());
if (!imageSurface){
std::cout << "Can't Load image " << filename << " " << IMG_GetError();
return;
}
GLint nOfColors = imageSurface->format->BytesPerPixel;
GLenum textureFormat = GL_RGB;
GLenum internalFormat = GL_RGB8;
if (nOfColors == 4) // contains an alpha channel
{
if (imageSurface->format->Rmask == 0x000000ff){
textureFormat = GL_RGBA;
internalFormat = GL_RGBA8;
}
else
{
textureFormat = GL_BGRA;
internalFormat = GL_RGBA8;
}
}
else if (nOfColors == 3) // no alpha channel
{
if (imageSurface->format->Rmask == 0x000000ff){
textureFormat = GL_RGB;
internalFormat = GL_RGB8;
}
else
{
textureFormat = GL_BGR;
internalFormat = GL_RGB8;
}
}
else
{
std::cout << "ERROR [SDL_Surface -> Texture]: Image is not True Color" << std::endl;
return;
}
glTexImage2D(face, 0, internalFormat, imageSurface->w, imageSurface->h, 0, textureFormat, GL_UNSIGNED_BYTE, imageSurface->pixels);
SDL_FreeSurface(imageSurface);
}
를 사용하여 이미지를로드 큐브 맵을
glGenTextures(1, &cube_texture);
glBindTexture(GL_TEXTURE_CUBE_MAP, cube_texture);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
LoadCubeMapFace(posX, GL_TEXTURE_CUBE_MAP_POSITIVE_X);
LoadCubeMapFace(negX, GL_TEXTURE_CUBE_MAP_NEGATIVE_X);
LoadCubeMapFace(posY, GL_TEXTURE_CUBE_MAP_POSITIVE_Y);
LoadCubeMapFace(negY, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y);
LoadCubeMapFace(posZ, GL_TEXTURE_CUBE_MAP_POSITIVE_Z);
LoadCubeMapFace(negZ, GL_TEXTURE_CUBE_MAP_NEGATIVE_Z);
만들기
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture->GetTextureMap());
GLint texture_uniform = glGetUniformLocation(Skybox::shader->GetShaderProgram(), "cube_map");
glUniform1i(texture_uniform, 0);
VS & FS 쉐이더
,519,