31

我使用 webgl 渲染器制作了一个场景,在其中放置了多个可以选择和移动的 3D 对象。However when an object is selected, I'd like to draw its axes. 将线条绘制到对象的中心没有问题,但我希望它们出现在场景中其他任何东西的前面,这样即使其他对象在前面,它们也是可见的 - 就像在 Blender 中一样。

我尝试使用 renderDepth 参数,但我认为我不了解如何使用它并且我没有得到任何结果。

谢谢您的帮助。

4

1 回答 1

82

如果您希望某些对象“在顶部”或“在前面”渲染,一个技巧是创建两个场景——第一个场景是您的常规场景,第二个场景包含您想要在顶部放置的对象。

首先,设置

renderer.autoClear = false;

然后创建两个场景

var scene = new THREE.Scene();
var scene2 = new THREE.Scene();

像往常一样将您的对象添加到第一个场景中,然后将您想要的对象添加到第二个场景中。

然后,在您的render()函数中,执行以下操作:

renderer.clear();
renderer.render( scene, camera );
renderer.clearDepth();
renderer.render( scene2, camera );

这将渲染第一个场景,清除深度缓冲区,然后在顶部渲染第二个场景。

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


编辑:另一种解决方案是只有一个场景,但使用这种模式:

mesh.renderOrder = 999;
mesh.onBeforeRender = function( renderer ) { renderer.clearDepth(); };

如果网格具有单一材质,它将在“顶部”渲染。

三.js r.85

于 2012-10-01T02:39:40.427 回答