içerisindeki tıklanabilir parçacıklar üç veri kaynağı yardımıyla (bir csv dosyasında okuduğum) 3B veri noktalarını görselleştiriyorum. Bu belirli noktalara ait diğer ölçüm verilerini göstermek için PointCloud'daki noktalara tıklamak istiyorum. Örneklere göre, bunun mümkün olduğunu gördüm ama işe yaramıyor. Ben (temelde bu örneklerden) Aşağıdaki kodu var:Üç.js PointCloud
function onDocumentMouseMove(e) {
mouseVector.x = 2 * (e.clientX/containerWidth) - 1;
mouseVector.y = 1 - 2 * (e.clientY/containerHeight);
var vector = new THREE.Vector3(mouseVector.x, mouseVector.y, 0.5).unproject(camera);
raycaster.ray.set(camera.position, vector.sub(camera.position).normalize());
scene.updateMatrixWorld();
intersects = raycaster.intersectObject(particles);
console.log(intersects);
}
Ama ne olursa olsun ben üzerinde hareket ettiği nokta boş bir dizi her zaman kesişiyor olduğunu. Bütün değişkenler yukarıda başlatılır
geometry = new THREE.Geometry();
for (var i = 0; i < howmany; i++) {
var vector = new THREE.Vector3(data[i][0], data[i][2], data[i][1]);
geometry.vertices.push(vector);
}
attributes = {
size: { type: 'f', value: [] },
customColor: { type: 'c', value: [] }
};
uniforms = {
color: { type: "c", value: new THREE.Color(0xFFFFFF) },
texture: { type: "t", value: THREE.ImageUtils.loadTexture("js/threejs/examples/textures/sprites/disc.png") }
};
var shaderMaterial = new THREE.ShaderMaterial({
uniforms: uniforms,
attributes: attributes,
vertexShader: document.getElementById('vertexshader').textContent,
fragmentShader: document.getElementById('fragmentshader').textContent,
alphaTest: 0.9,
});
particles = new THREE.PointCloud(geometry, shaderMaterial);
for (var i = 0; i < howmany; i++) {
colors[i] = new THREE.Color(RainBowColor(data[i][3], 4));
sizes[i] = PARTICLE_SIZE * 0.5;
}
scene.add(particles);
, PARTICLE_SIZE 20 ve partiküller (0,0,0) arasında değerler ile yaklaşık 10.000 sayısı ve: parçacıkları ile ilgili olarak
Aşağıdaki yazdım Nesne (10000,10000,10000). Döndürme ve yakınlaştırma için THREE.OrbitControls kullanıyorum.
Bu durumda hata yapan veya parçacıklarla raycasting yapan kimse var mı?
Çok teşekkürler, Mika.
r.72 'THREE.Raycaster.params.PointCloud.threshold' varsayılan olarak 1'dir. Onu artırmayı dene. 2 parçacık içeren küçük bir sorun üzerinde hata ayıklayıcı ile adım. – WestLangley
Sadece kendiliğinden 'raycaster.params.PointCloud.threshold = 20 çalıştı; ...' ve işe yaradı. Zaten nokta boyutlarının ince ayarında çalışmam gerekecek. Yani, ilk başta, bu ben bu eşiğin önemini biliyoruz çok yardımcı olur. Teşekkür ederim. –