2013-08-05 5 views
2

그림자 맵을 작동 시키려고 노력했지만, 그 깊이 버퍼 부분을 지나칠 수도 있습니다. 나는 몇 시간 동안 인터넷을보고 있었는데, yadayadayada.(그림자 맵) 깊이 버퍼를 텍스처로 렌더링하고 그것을 확인하기 위해 그리기

GLuint framebuffer; 
    GLuint depth; 
    GLuint texture; 

    glGenFramebuffers(1, &framebuffer); 
    glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); 

    glGenTextures(1, &texture); 
    glBindTexture(GL_TEXTURE_2D, texture); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1280, 800, 0, GL_RGBA, GL_FLOAT, NULL); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

    glBindTexture(GL_TEXTURE_2D, 0); 


    glGenTextures(1, &depth); 
    glBindTexture(GL_TEXTURE_2D, depth); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 1280, 800, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

    glBindTexture(GL_TEXTURE_2D, 0); 




    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth, 0); 
    //glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 
    glDrawBuffer(GL_NONE); 


    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) 
     std::cout << "There was a problem with making the framebuffer\n"; 
    glBindFramebuffer(GL_FRAMEBUFFER, 0); 

    return framebuffer; 

보기 위해 쿼드로 '깊이'렌더링 : 모든

glBindFramebuffer(GL_FRAMEBUFFER, FBO); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    for (int i = 0; i < objects.size(); i++) 
    { 
    objects[i].renderObjectForDepth(); 
    } 
    glBindFrameBuffer(GL_TEXTURE_2D,0); 
    glBindTexture2D(GL_TEXTURE_2D, texture) 
    drawQuad(); 

을 그리고 나에게

FBO과 깊이의 질감을 만들기 - 여기에 지금까지 내 코드입니다 괜찮아 보이지만 첨부 된 그림처럼 이미지를 생성합니다. 나는 며칠 동안 내 머리카락을 찢어 버렸고, 어떤 도움을 주시면 감사하겠습니다.

EDIT : 필자가 결코 작성하지 않은 텍스처 색을 빈 질감으로 렌더링했기 때문입니다. 깊이 텍스처를 그린 후 컬러 텍스처를 작성하면 잘 동작합니다. 하지만 색상 질감이 없으면 어떻게해야합니까? 당신의 깊이 전용 FBO에 렌더링 할 때 다음과 같은 두 가지 상태가 설정되어 있는지

The 'depth buffer being rendered'

+0

FBO 만 깊이 텍스처와 완벽하게 유효합니다. – Grimmy

+0

@Grimmy 깊이 텍스처만으로 렌더링 할 때 색상 텍스처가있을 때만 텍스처가 전혀 나타나지 않습니다. – BlueSpud

+0

오. glColorMask를 확인하십시오 – Grimmy

답변

2

확인 :

glDrawBuffer(GL_NONE); 
glReadBuffer(GL_NONE);