Three.js - использование видовых экранов и EffectComposer вместе

0 Lee Stemkoski [2013-10-31 21:46:00]

Недавно я создал демоверсию Three.js, которая отображает сцену, а затем устанавливает окно просмотра в меньшую часть окна и отображает сцену из служебной камеры, создавая эффект стиля мини-карты; код доступен по адресу:

http://stemkoski.github.io/Three.js/Viewports-Minimap.html

Соответствующий фрагмент кода:

// w = window width, h = window height, mapWidth = minimap width, mapHeight = minimap height
renderer.setViewport( 0, 0, w, h );
renderer.clear();

// full scene with perspective camera
renderer.render( scene, camera );

// minimap with orthogonal camera
renderer.setViewport( 0, h - mapHeight, mapWidth, mapHeight );
renderer.render( scene, mapCamera );

... и это работает как шарм.

Теперь я хочу расширить этот пример, добавив некоторую постобработку на сцену; Я настроил THREE.EffectComposer названный composer, добавил соответствующие THREE.EffectComposer рендеринга, и я переключил renderer.render( scene, camera ) в код выше с composer.render(), но теперь миникарта исчезает; см. http://stemkoski.github.io/Three.js/Viewports-Minimap-Effects.html для живого примера.

Как я могу исправить этот пример? В частности, существуют ли настройки в EffectComposer которые необходимо настроить для совместной работы с визуализацией вида? Или еще лучше, можно ли добавить второй композитор RenderPass к композитору, который позволяет нам использовать видовое окно?

javascript three.js


1 ответ


1 Решение WestLangley [2013-11-02 00:01:00]

Вы, кажется, меняете код, так как я сначала посмотрел на него, но, основываясь на вашем исходном вопросе, вам нужно очистить буфер глубины, прежде чем отображать мини-карту.

renderer.clear( false, true, false );
renderer.render( scene, mapCamera );

Если ваш код работал без этого, я думаю, вам просто повезло.

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

OrthographicCamera.left (.right/.top/.bottom) должен находиться в мировых координатах - не зависит от размера окна в пикселях.

three.js r.62