Перед Z проходить буфер с OpenGL? - PullRequest
8 голосов
/ 13 сентября 2010

Как именно я могу выполнить предварительный анализ буфера Z с openGL.

Я пробовал это:

glcolormask(0,0,0,0); //disable color buffer

//draw scene

glcolormask(1,1,1,1); //reenable color buffer

//draw scene

//flip buffers

Но это не работаетпосле этого я ничего не вижу.Какой лучший способ сделать это?

Спасибо

Ответы [ 3 ]

15 голосов
/ 14 сентября 2010
// clear everything
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// z-prepass
glEnable(GL_DEPTH_TEST);  // We want depth test !
glDepthFunc(GL_LESS);     // We want to get the nearest pixels
glcolormask(0,0,0,0);     // Disable color, it's useless, we only want depth.
glDepthMask(GL_TRUE);     // Ask z writing

draw()

// real render
glEnable(GL_DEPTH_TEST);  // We still want depth test
glDepthFunc(GL_LEQUAL);   // EQUAL should work, too. (Only draw pixels if they are the closest ones)
glcolormask(1,1,1,1);     // We want color this time
glDepthMask(GL_FALSE);    // Writing the z component is useless now, we already have it

draw();
3 голосов
/ 13 сентября 2010

Вы правильно делаете с glColorMask.

Однако, если вы ничего не видите, скорее всего, вы используете неправильную функцию проверки глубины.Вам нужен GL_LEQUAL, а не GL_LESS (что по умолчанию).

glDepthFunc(GL_LEQUAL);
0 голосов
/ 13 сентября 2010

Если я вас правильно понял, вы пытаетесь отключить тест глубины, выполняемый OpenGL для определения отбраковки. Вы используете цветовые функции здесь, что не имеет смысла для меня. Я думаю, что вы пытаетесь сделать следующее:

glDisable(GL_DEPTH_TEST); // disable z-buffer

// draw scene

glEnable(GL_DEPTH_TEST); // enable z-buffer

// draw scene

// flip buffers

Не забудьте очистить буфер глубины в начале каждого прохода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...