2015-03-25 3 views
5

Я хочу, чтобы у меня было 2 сцены с добавленной камерой, и я хочу, чтобы они были покрашены в один и тот же холст (но не для того, чтобы разделить этот холст). Я использую 2 рендерера, которые рисуют в одном и том же элементе canvas, но моя проблема в том, что второй рендеринг перезаписывает первый, поэтому я вижу только одну из двух сцен. Я попробовал alpha: true для рендера и setClearColor(0x000000, 0);, но все еще не желаемого результата.Нарисуйте 2 сцены в том же холсте - three.js

Я хочу добиться изображения в эффекте изображения, но я хочу, чтобы «внутренняя картина» была прозрачной (только для рисования объектов, а не для фона).

Возможно ли это с помощью трёх.js?

благодаря

+0

Вы можете разместить изображение, отображающее проблему? У обоих рендереров есть 'setClearColor (0x000000, 0);' – gaitat

+0

@gaitat: Оба рендеринга имеют setClearColor (0x000000, 0). Изображение ничего интересного, я просто ничего не вижу с 1-й сцены, я вижу только вторую сцену. Это похоже на второй рендеринг, который перезаписывает холст. – ThanosSar

+0

См. Http://stackoverflow.com/questions/12666570/how-to-change-the-zorder-of-object-with-threejs/12666937#12666937 – WestLangley

ответ

7

Если у вас есть две сцены, и вы хотите, чтобы создать эффект картинка в картинке, вы можете использовать следующий шаблон. Первый набор autoClear:

renderer.autoClear = false; // important! 

Затем в цикле рендеринга, использовать шаблон, как этот:

renderer.clear(); 
renderer.setViewport(0, 0, window.innerWidth, window.innerHeight); 
renderer.render(scene, camera); 

renderer.clearDepth(); // important! clear the depth buffer 
renderer.setViewport(10, window.innerHeight - insetHeight - 10, insetWidth, insetHeight); 
renderer.render(scene2, camera); 

Three.js R.71

+0

Да, это так. не говоря уже о том, что можно, конечно, использовать другую камеру для второго рендеринга. – ThanosSar

+0

@WestLangley еще раз ты спасешь мою задницу, ты отличный человек. Мой долг благодарности уже достиг космоса. Спасибо !!! – atom

0

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

Прозрачный метод может стать противно, когда вы используете ясный цвет, значение трафарета и т.д.

for (...) { 
    // init left, bottom, etc. with viewport info 

    renderer.setViewport(left, bottom, width, height); 
    renderer.setScissor(left, bottom, width, height); 
    renderer.setScissorTest(true); 

    renderer.render(scene[i], camera[i]); 
} 

Вот Three.js примера на несколько портов зрения: link. Это рендеринг одной и той же сцены, но идея довольно похожа. Он использует ножничный тест.

+0

Когда я это делаю, он просто рисует последнюю сцену, а все остальное черное. Как я могу предотвратить его рисование всего черного в области отбрасываемых фрагментов ножниц? – trusktr

+0

@trusktr Hmm .. Попробуйте отключить autoClear рендеринга. Может быть полезно, если вы поместите ссылку на свой код. – shrekshao