2014-09-01 3 views
1

Основные этапы тестирования глубины из моего понимания: 1) включить тестирование глубины и как мы хотим провести проверку глубины 2) создать объект буфера кадра и убедиться, что он имеет глубину, присоединенную к нему 3) привязать наш буфер кадров объект (обязательно очистите его перед рендерингом) 4) нарисовать материалЧто может быть проблемой с моим конвейером, чтобы сделать буфер глубины текстурой?

И это должно быть так? наша привязка глубины буфера кадра должна иметь данные глубины? Но я всегда получаю прямо глубину 1 по умолчанию чистого цвета

шаг 1:

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

шаг 2:

//create the frame buffer object 
glGenFramebuffers(1, &m_uifboHandle); 

// Initialize FBO 
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle); 

//create 2 texture handles 1 for diffuse, 1 for depth 
unsigned int m_uiTextureHandle[2]; 
glGenTextures(2, m_uiTextureHandle); 

//create the diffuse texture 
glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[0]); 

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_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0); 

.

//create the depth buffer 
glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[1]); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, uiWidth, uiHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_uiTextureHandle[1], 0); 

//go back to default binding 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

шаг 3:

//bind the frame buffer object 
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle); 

//clear it 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

шаг 4:

//draw things 

Разве это не шаги?
Я что-то не хватает?
Я пробовал несколько разных учебников.
Я не могу получить какую-либо глубину для визуализации текстуры. Я продолжаю получать прямые 1 и снова.

+0

Попробуйте добавить параметры фильтрации после связывания глубины текстуры, так же, как вы делали после связывания вашего диффузного текстуры. – thp9

+0

добавил. еще ничего –

ответ

0

Возможно, фреймбуфер не является полным. Попробуйте checking for completeness. Кроме того ваш код был:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 

Однако, это должно быть (смотреть RGB-RGBA):

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); 

 Смежные вопросы

  • Нет связанных вопросов^_^