1

我正在使用模板缓冲区将两个 THREE.js 场景相互合成。这可行,但是当我尝试使用 PointerLockControls 时,移动相机(使用鼠标或键盘)以某种方式导致视图的模板部分被移动/移动。它似乎落后于相机位置。

我尝试过其他控件(轨迹球、轨道),使用这些控件时不会出现此问题。

有些东西似乎在发生冲突,但我不知道在哪里看。

PointerLock 代码直接从示例中复制而来。

这是渲染代码:

// 1: clear scene (autoClear is disabled)
renderer.clear(true, true, true);

// 2: draw portal mesh into stencil buffer
gl.colorMask(false, false, false, false);
gl.depthMask(false);
gl.enable(gl.STENCIL_TEST);
gl.stencilMask(0xFF);
gl.stencilFunc(gl.NEVER, 0, 0xFF);
gl.stencilOp(gl.INCR, gl.KEEP, gl.KEEP);

renderer.render(stencilScene, camera);

gl.colorMask(true, true, true, true);
gl.depthMask(true);
gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);

// 3: draw toScene on scencil
renderer.clear(false, true, false);

gl.stencilFunc(gl.LESS, 0, 0xff);

renderer.render(toScene, camera);

gl.disable(gl.STENCIL_TEST);

renderer.clear(false, false, true);

// clear the depth buffer and draw the fromPortal mesh into it
renderer.clear(false, true, false);

gl.colorMask(false, false, false, false);
gl.depthMask(true);

renderer.render(stencilScene, camera);

// draw the actual scene
gl.colorMask(true, true, true, true);
gl.depthMask(false); // gl.enable(gl.DEPTH_TEST) ?

renderer.render(fromScene, camera);

这是一个小提琴:http: //jsfiddle.net/g8EWG/

如果你从左向右移动,或者只是环顾四周,这种变化是非常明显的。

任何帮助将不胜感激。

4

0 回答 0