使用飞行控件时是否可以突出显示对象?与this类似,但是单击它们时突出显示的框。我最终希望它做的是点击一个对象,然后进入一个网站。但是目前我尝试在点击对象时突出显示一个对象:
function onDocumentMouseDown( event ) {
event.preventDefault();
var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
projector.unprojectVector( vector, camera );
var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
var intersects = raycaster.intersectObjects( mesh );
if ( intersects.length > 0 ) {
intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}
/*
// Parse all the faces
for ( var i in intersects ) {
intersects[ i ].face.material[ 0 ].color.setHex( Math.random() * 0xffffff | 0x80000000 );
}
*/
但是,当我使用飞控制时,这似乎不起作用吗?如果没有,可以突出显示该对象以显示一些文字吗?
答案 0 :(得分:1)
我刚用飞控制测试了它,它的工作正常。在这种情况下,请确保对包含网格的数组进行光线投射或仅convenience init()
。
scene.children
Three.js r.71
考虑结帐https://github.com/jeromeetienne/threex.domevents,轻松将var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
function onDocumentMouseDown( event ) {
event.preventDefault();
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
raycaster.setFromCamera( mouse, camera );
// calculate objects intersecting the picking ray
var intersects = raycaster.intersectObjects( scene.children );
if ( intersects.length > 0 ) {
intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}
}
container.addEventListener( 'mousedown', onDocumentMouseDown, false );
或click
等DOM事件添加到您的网格中。