2017-02-02 1 views
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,

답변

0

문제가 무엇인지 확실하지 않지만 사용중인 이미지가 제대로 작동하지 않았습니다. 그 (것)들을 paint.NET로 열고 32 비트 심상으로 그 (것)들을 저장하는 것은 문제점을 해결 한 것을 보인다.

관련 문제