我遇到了一些问题,试图实现这个画布不占用整个屏幕的宽度和高度。这是我找到的解决方案非常好的解决方案。
在现有的帆布初始化一切:
var init = function() {
var canvas_model = document.getElementById('model')
var viewSize = 50 // Depending on object size, canvas size etc.
var camera = new THREE.OrthographicCamera(-canvas_model.clientWidth/viewSize, canvas_model.clientWidth/viewSize, canvas_model.clientHeight/viewSize, -canvas_model.clientHeight/viewSize, 0.01, 2000),
}
添加事件侦听到画布:
canvas_model.addEventListener('click', function(event){
var bounds = canvas_model.getBoundingClientRect()
mouse.x = ((event.clientX - bounds.left)/canvas_model.clientWidth) * 2 - 1;
mouse.y = - ((event.clientY - bounds.top)/canvas_model.clientHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(scene.children, true);
if (intersects.length > 0) {
// Do stuff
}
}, false)
还是一个“touchstart”事件,改变线计算mouse.x和mouse.y导入:
mouse.x = ((event.touches[0].clientX - bounds.left)/canvas_model.clientWidth) * 2 - 1;
mouse.y = - ((event.touches[0].clientY - bounds.top)/canvas_model.clientHeight) * 2 + 1;
保证金和填充可能导致您的坐标有点偏移。你有没有解释它? – Prusse
目前在演示中没有保证金和填充,但我描述的技术并不是确切的。 – Andrea
看看[这个例子](http://mrdoob.github.com/three.js/examples/canvas_interactive_cubes.html)。 –