1

我需要使用我自己的几何图形,因为默认立方体看起来不像它应该处于线框模式(现在它由三角形而不是正方形组成)。

所以我制作了自己的几何体,看起来还不错,但是光线投射器对我自己的对象的工作不如对内置立方体的工作好。

var cube = new THREE.Line( getCube( 5,5, 5), new THREE.LineDashedMaterial( { color: 0x000000,dashSize: 1, gapSize: 0.1, linewidth: 2 } ),THREE.LinePieces );

getCube() 返回的地方

var geometry = new THREE.Geometry()

见例子:http: //jsfiddle.net/QHjSM/12/

顶部的 6 个颜色填充框是默认的 THREE.CubeGeometry 框,使用 raycaster 选择它们效果很好,6 个线框是我的自定义几何体。

问题:如果您尝试在框外单击,但非常接近它会捕捉到框,如果您在框内(在它的中间)单击它也不会捕捉到它。

但最烦人的是,如果您在一个框内单击,但靠近另一个框,有时它不会抓错一个。

我不确定它是否可以做得更好,尝试了所有 geometry.compute... 方法,但仍然没有效果。

4

1 回答 1

1

美好的一天,您的自定义立方体实际上不是立方体。它们只是一堆没有对应面的线条。您的选择没有按预期返回,因为您的“立方体”确实有正确的空洞。您可以做的是在您getCube构建了顶点之后在您的函数中,然后您可以以类似的方式构建您的所有面。

看看这个例子:自定义几何和面法线问题

通常,您需要仔细地对每 3 组顶点进行图案化,这样当您在顺时针方向构建面时,法线将被正确计算。这是添加人脸的基本示例。

geometry.faces.push(new THREE.Face3(1,2,3));

但!请注意,这将导致通过您的线框的相同的上述对角线。因此,对于您的用例,为什么不简单地使用基本立方体网格并选择和移除线框,然后将线条绘制的框覆盖为您的自定义线框。两全其美。

仅供参考,您可能已经知道但 Face4 已经消失了,所以无论如何您都需要使用 Face3 和某种自定义线框来执行此操作。

编辑:我对你的小提琴做了一点测试,发现了一些奇怪的东西。使用 CanvasRender,即使线框脱离默认立方体,您仍然可以看到对角线!我尝试了 WebGLRenderer,它很好。我将不得不进一步研究这一点。

CanvasRenderer http://jsfiddle.net/QHjSM/13/

WebGLRenderer http://jsfiddle.net/QHjSM/14/

MeshBasicMaterial再说一遍,嗯,在 Three.js 网站上使用 a 的所有 CanvasRenderer 示例中,似乎这些鬼面线都是可见的。我唯一能做的就是简单地将立方体网格材料的不透明度降低到 0.1 以减少效果。我想唯一的其他方法是切换到 WebGLRenderer 但我期待在这方面出错:) 这是最后一个测试

http://jsfiddle.net/QHjSM/16/

于 2013-10-01T12:11:41.727 回答