我目前正在开发一个使用Threejs的小型Web应用程序。我遇到了以下问题:

我构建了一个包含我的threejs内容的原型,一切都在这里正常工作(画布位于原型window.innerWidth和window.innerHeight =>中,因此其大小与我的浏览器窗口相同。选择效果很好,但我想使用画布在我的网页应用程序上,选择3d曲面也需要在那里工作。

我发现通过画布的CSS更改边距或顶部后,它不再起作用。该Web应用程序基于滚动页面,Threejs画布位于div容器内,该容器只能通过滚动页面来查看。

为了进行选择,我使用以下逻辑/代码->此逻辑在“全屏原型”中效果很好,但在Web应用程序页面中效果不佳

ojit_pre

我认为var向量的计算错误,但是我无法弄清楚如何正确执行。

任何帮助,将不胜感激
谢谢
最好的重养

最佳答案

200%的方式

var x = event.offsetX == undefined ? event.layerX : event.offsetX;
var y = event.offsetY == undefined ? event.layerY : event.offsetY;

var vector = new THREE.Vector3();
vector.set( ( x / renderer.domElement.width ) * 2 - 1, - ( y / renderer.domElement.height ) * 2 + 1, 0.5 );

projector.unprojectVector( vector, camera );


或参见此example。在控制台中查看消息。

<script src="js/controls/EventsControls.js"></script>

EventsControls = new EventsControls( camera, renderer.domElement );
EventsControls.draggable = false;

EventsControls.onclick = function() {

       console.log( this.focused.name );

}

var mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );

EventsControls.attach( mesh );

//

function render() {
       EventsControls.update();
       controls.update();
       renderer.render(scene, camera);
}

关于javascript - Threejs对象选择问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26488739/

10-11 23:31