В чем может быть проблема с моим конвейером рендеринга буфера глубины в текстуру?

Основные шаги для углубленного тестирования из моего понимания:
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 снова и снова.

1

Решение

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

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);
0

Другие решения


По вопросам рекламы [email protected]