显示隐藏:
我一直在使用 Three.js Release 50 并且能够在以下帮助下显示/隐藏对象(在我的应用程序中,它是一个网格子对象):
THREE.SceneUtils.traverseHierarchy(mesh,function(child){
var z = document.getElementById("cameras").selectedIndex*5 -10;
if (z === -10){
child.visible = true;
} else if (child.position.z !== z){
child.visible = false;
} else {
child.visible = true;
};
});
但是在使用release 54时,据说要使用,object.traverse却发现很难一样。如何使用版本 54 替换上述代码?我在使用 54 版时遇到的错误是:
采摘:
我找到了一个非常著名且复杂的示例,用于在 Three.js 中进行 Picking,它基于“Ray Picking”及其链接:Three.js Picking Example。基于这个例子,我一直在尝试在我的应用程序中实现拾取。但不知何故,这条线出现了错误。
var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position
).normalize() );
我在自定义javascript 对象[数据结构] 中管理了锥体 [我的几何体] 的父子关系,使得(Layer1 {用于对象内每个层的数组} 有 100 个锥体,并且都是父级,第 2 层有 100 个锥体,它们是 layer1 [multiplicity 1:1]] 上的锥体,第 3 层有锥体,它们是 layer 2 上的锥体的孩子,它们的关系也是 1:1,因此它们也是 layer1 锥体的孙子)。
我使用网格从第一层添加祖锥,并通过该父级访问 layer2 中的子级,并将其添加到相同的网格和通过子级访问的孙子级,并添加到相同的网格中。最后,我将整个 Mesh 添加到场景中。由于“z-depth”变化[对于第一层,z-坐标:5,对于 layer2:0 和 layer 3:-5],layer1 和 layer2 和 layer3 字面上形成三层,如下图所示。
但是在使用下面的代码时,我看不到我的锥体上有任何采摘。
var vector = new THREE.Vector3( mouse.x, mouse.y, 1 );
projector.unprojectVector( vector, camera );
var raycaster = new THREE.Raycaster( camera.position, vector.subSelf( camera.position ).normalize() );
var intersects = raycaster.intersectObjects( scene.children ); // tried with mesh.children as well, but no change :(
if ( intersects.length > 0 ) {
if ( INTERSECTED != intersects[ 0 ].object ) {
if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );
INTERSECTED = intersects[ 0 ].object;
INTERSECTED.currentHex = INTERSECTED.material.emissive.getHex();
INTERSECTED.material.emissive.setHex( 0xff0000 );
}
} else {
if ( INTERSECTED ) INTERSECTED.material.emissive.setHex( INTERSECTED.currentHex );
INTERSECTED = null;
}
我希望我的特定锥体在光线相交时被拾取,同时基于特定锥体是否是祖父母/父母/孩子的特定家族的剩余锥体也被拾取。我为我的自定义数据结构提供了帮助函数,它通过输入祖父母(祖父母 <- 父母)返回父母,并通过输入父母来返回孩子,您可以利用它来帮助我挑选。
我有一个 JSfiddle 链接,它使用 Three.js release 54 和 CombinedCamera.js 作为附加资源,请有人帮我解决这个问题。我非常需要帮助。
这是我的 Jsfiddle 链接:http: //jsfiddle.net/sagh0900/SQyLL/
在实施 Picking 和使用 Three.js 版本 54 之前,我以前的工作Jsfiddle 版本。在这个版本中,我使用了 three.js 的第 50 版,我能够成功地显示/隐藏对象:http://jsfiddle。净/sagh0900/PrVbg/3/
提前感谢您的帮助和支持:)