glStencilFunc по какой-то причине не работает :( - PullRequest
0 голосов
/ 11 ноября 2011

Независимо от того, что я пытался, частицы рендерится за пределами земного шара, не касаясь его, я хочу наоборот! Независимо от того, какие параметры я изменил (пробовал в течение 2 часов), либо частицы визуализируются снаружи нормально, но не внутри, либо частицы как снаружи, так и внутри. Я получаю огромную головную боль от этого, может кто-нибудь, пожалуйста, помогите мне решить эту ошибку. Я использую 1 бит для трафарета. GDEbugger показывает, что трафаретный буфер работает нормально.

glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_NEVER, 1, 1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
globe->Use();
globe->SetWVP(&WVP, true);
Render(globe.obj");
glDisable(GL_STENCIL_TEST);

glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

RenderParticlesUsingTransformFeedback();

Ответы [ 2 ]

5 голосов
/ 11 ноября 2011

Вы отключаете проверку трафарета непосредственно перед рендерингом частиц.

1 голос
/ 11 ноября 2011
glDisable(GL_STENCIL_TEST);

Если вы хотите, чтобы RenderParticlesUsingTransformFeedback действительно проверялось на буфере трафарета, вы должны использовать его.Также я предполагаю, что часть «UsingTransformFeedback» означает, что вы сгенерировали эти частицы ранее с помощью TF.Поскольку трафарет не отбирает треугольники, он не влияет на генерацию данных с обратной связью преобразования.

В любом случае, ваш код трафарета не работает, потому что он не может работать,Вы не можете использовать только трафаретный буфер, чтобы гарантировать, что частицы не визуализируются за пределами трехмерного объема.Вы можете сделать это вне 2D-тома.И вы можете частично сделать это для частиц за пределами трехмерного объема, если вы не возражаете против объектов за сферой от рендеринга.

Но если вы хотите ограничить его трехмерным объемом, вы собираетесьиспользовать шейдерную логику, а не буфер трафарета.Вы должны держать самую близкую точку трехмерного объема, но вам также нужна самая дальняя точка.Поэтому вам нужно сделать некоторые интересные махинации с буфером глубины.

Когда вы визуализируете частицы, вам нужно взять оба буфера глубины, которые вы использовали для захвата ближнего и дальнего значений.Затем в своем шейдере вы отбрасываете фрагмент, если текущая глубина находится вне этого диапазона.

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