2015-06-05 3 views
0

В настоящее время я работаю над проектом XNA, где мне нужно создать изображение в картинке. Наложение на 3D-сцену с нескольких ракурсов. В настоящее время я пытаюсь использовать 2 видовых экрана для этого. Основной заполняет весь экран и работает по желанию. Второй помещается в один из углов первого (перекрывает этот угол) и меньше 5-го размера в качестве первого. кроме размера и размещения видовых экранов, единственное, что действительно имеет значение между двумя, - это размещение их камер со сценой.Cross Viewport oclussion culling

До тех пор, пока второй видовой экран нарисован вторым, и нет объектов рядом с камерой первого видового экрана в перекрывающемся углу, это фактически работает greate. Однако, если есть объект, близкий к камере, и в углу первого объекта видового экрана, похоже, происходит отбраковка окклюзии в результате первого объекта видового экрана. Однако окклюзирующий объект первого окна просмотра не отображается во втором пространстве видовых экранов.

Мой вопрос в том, как предотвратить предотвращение «перекрестного просмотра»? Я искал все, и закрытые темы, которые я мог найти, предлагают рисовать второй видовой экран в RenderTarget2D и использовать SpriteBatch для отображения полученной текстуры. Хотя это делает исправление проблемы окклюзии, она делает хаос по z-упорядочению, отбору CCW и моим водным эффектам, все из которых у меня никогда не возникало при использовании целевой рендеринга по умолчанию.

ответ

0

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

GraphicsDevice.Clear(ClearOptions.DepthBuffer, Color.Black, 1, 0);

Я побежал к этому раствору при попытке использовать буфер трафарета для предотвращения главного окна просмотра из рисунка под второй, но все, что я сделал до этого открытия, действительно не имело заметного эффекта. После того как я удалил весь код Stencil, и похоже, что я получаю желаемый эффект. Извините, но я не могу объяснить, как и почему это работает, не испортив первую проблему в Viewport, и я сам не знаю.