0
少字的大小,更麻煩代碼=)three.js所 - 紋理
var objects = [];
var camera, scene, renderer;
document.addEventListener('mousedown', onDocumentMouseDown, false);
init();
render();
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 ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize());
var intersects = ray.intersectObjects(objects);
if (intersects.length > 0) {
console.log(intersects[ 0 ].object);
}
}
function init() {
container = document.getElementById('container');
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera(90, window.innerWidth/window.innerHeight, 1, 1100);
camera.position.z = 50;
scene.add(camera);
var particle = new THREE.Particle(new THREE.ParticleBasicMaterial({ map: THREE.ImageUtils.loadTexture("img/satellite.png") }));
objects.push(particle);
//particle.scale.x = particle.scale.y = 0.25
scene.add(particle);
projector = new THREE.Projector();
renderer = new THREE.CanvasRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
container.appendChild(renderer.domElement);
}
function render() {
camera.lookAt(scene.position);
renderer.render(scene, camera);
}
作爲結果,我們得到具有紋理可點擊的粒子。但我不明白幾件事情:
爲什麼粒子的「點擊」區域是如此之小?只有當我點擊一個粒子的中間時,它纔有效。
爲什麼這個粒子如此之大?紋理是這個.png文件,粒子比16×16更大。我該如何解決這個問題?是的,我知道particle.scale,這會使粒子看起來更小。但是,粒子的「可點擊」區域也變小了。
這是一個有趣的問題。也許我們可以在'Ray'中添加一些代碼,以便粒子區域可裁剪...您是否介意將它作爲github頁面上的功能請求報告? – mrdoob
當然,https://github.com/mrdoob/three.js/issues/2170 –