Я хочу сделать буфер глубины текстурой и нарисовать квад с DepthTexture. Но это не сработает.
Сначала я делаю DepthTexture:
glGenTextures(1, &_iTexDepth);
glBindTexture(GL_TEXTURE_2D, _iTexDepth);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_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 );
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, _w, _h, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, 0);
и подготовиться к оказанию:
glViewport(0, 0, _w, _h);
glMatrixMode(GL_PROJECTION);
glLoadMatrixf(camera_proj);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixf(camera_modelview);
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_PIXEL_MODE_BIT);
glDrawBuffer(GL_BACK);
glReadBuffer(GL_BACK);
glClearColor(0, 0, 0, 1);
glClearDepth(1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
и сделать что-то, и скопировать в текстуру:
glBindTexture(GL_TEXTURE_2D, _iTexDepth);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, _w, _h);
glBindTexture(GL_TEXTURE_2D, 0);
и, наконец, я связываю _iTexDepth
и нарисую Quad
Этот код хорошо работает с текстурой GL_RGBA8
, но не работает с GL_DEPTH_COMPONENT
(белый только с DEPTH_COMPONENT
)
Если у вас есть представление об этой проблеме, я хочу помочь
PS Я не хочу использовать FBO
Если ваша текстура получается белой, она действительно отображается правильно.
Проблема, я думаю, связана с настройкой дальних и ближних плоскостей в вашей проекционной матрице. Буфер глубины не является линейным, и если ближайшая к вам плоскость очень близка, например, 0,1 и ваша дальняя плоскость далеко, как 500,0, то много возможных значений глубины ОЧЕНЬ близко к вашей ближней плоскости.
Лучше установить близкую плоскость к чему-то вроде 2.0 или даже выше. Экспериментируйте с разными значениями ближней/дальней плоскости и сообщите мне, если у вас все еще есть проблемы.
Что касается твоего английского, это прекрасно! Как бывший частный преподаватель английского языка для людей в Японии, ваш стандарт довольно хорош.