Меньше словами, больше коды =)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 –