glDisable(GL_STENCIL_TEST);
Если вы хотите, чтобы RenderParticlesUsingTransformFeedback
действительно проверялось на буфере трафарета, вы должны использовать его.Также я предполагаю, что часть «UsingTransformFeedback» означает, что вы сгенерировали эти частицы ранее с помощью TF.Поскольку трафарет не отбирает треугольники, он не влияет на генерацию данных с обратной связью преобразования.
В любом случае, ваш код трафарета не работает, потому что он не может работать,Вы не можете использовать только трафаретный буфер, чтобы гарантировать, что частицы не визуализируются за пределами трехмерного объема.Вы можете сделать это вне 2D-тома.И вы можете частично сделать это для частиц за пределами трехмерного объема, если вы не возражаете против объектов за сферой от рендеринга.
Но если вы хотите ограничить его трехмерным объемом, вы собираетесьиспользовать шейдерную логику, а не буфер трафарета.Вы должны держать самую близкую точку трехмерного объема, но вам также нужна самая дальняя точка.Поэтому вам нужно сделать некоторые интересные махинации с буфером глубины.
Когда вы визуализируете частицы, вам нужно взять оба буфера глубины, которые вы использовали для захвата ближнего и дальнего значений.Затем в своем шейдере вы отбрасываете фрагмент, если текущая глубина находится вне этого диапазона.