在同一个场景中绘制 2 个场景 canvas - three.js
Draw 2 scenes in the same canvas - three.js
我想有 2 个场景,每个场景都添加了一个相机,我希望它们在同一个 canvas 中绘制(但不要分割这个 canvas)。
我目前使用 2 个在同一个 canvas 元素中绘制的渲染器,但我的问题是第二个渲染器覆盖了第一个,所以我只能看到两个场景中的一个。
我为渲染器和 setClearColor( 0x000000, 0 );
尝试了 alpha: true
,但仍然没有得到想要的结果。
我想实现画中画效果,但是我希望"inside picture"透明(只画物体,不画背景)。
three.js 可以吗?
谢谢
如果你有两个场景,并且你想创建一个画中画效果,你可以使用下面的模式。第一组 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
我认为更好的解决方案是使用剪刀测试。剪刀测试基本上会丢弃剪刀外的任何片段 window。
当您使用清除颜色、模板值等时,清除方法可能会变得令人讨厌。
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。它渲染相同的场景,但想法非常相似。它正在使用剪刀测试。
我想有 2 个场景,每个场景都添加了一个相机,我希望它们在同一个 canvas 中绘制(但不要分割这个 canvas)。
我目前使用 2 个在同一个 canvas 元素中绘制的渲染器,但我的问题是第二个渲染器覆盖了第一个,所以我只能看到两个场景中的一个。
我为渲染器和 setClearColor( 0x000000, 0 );
尝试了 alpha: true
,但仍然没有得到想要的结果。
我想实现画中画效果,但是我希望"inside picture"透明(只画物体,不画背景)。
three.js 可以吗?
谢谢
如果你有两个场景,并且你想创建一个画中画效果,你可以使用下面的模式。第一组 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
我认为更好的解决方案是使用剪刀测试。剪刀测试基本上会丢弃剪刀外的任何片段 window。
当您使用清除颜色、模板值等时,清除方法可能会变得令人讨厌。
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。它渲染相同的场景,但想法非常相似。它正在使用剪刀测试。