背景: 私は JS を知っている開発者ですが、Three JS は比較的新しいものです。基本的な繰り返しアニメーションを使用した静的シーンを含むいくつかの小さなプロジェクトを実行しました。
私は現在、Google の Globe プロジェクトhttp://workshop.chromeexperiments.com/globe/の修正版に取り組んでいます。振り返ってみると、ゼロから始めるべきだったのかもしれませんが、彼らの開発者がとったアプローチを見るには良いツールでした。ThreeJS をすべてバラバラにすることなく更新できたらいいのにと思います (サポートされていないメソッドが多すぎて、修正できなかったバグがいくつかあります。少なくとも、試行した時間では修正できませんでした)。
オリジナルでは、すべての幾何学的ポイントを 1 つのオブジェクトにマージして、FPS を高速化しています。私の目的のために、JSON を使用して地球上のポイントを更新していますが、100 を超えることはありません (おそらく実際には 60 を超えることはありません)。したがって、それらは個別のままである必要があります。「結合」フェーズを削除したので、ポイントにデータを個別に割り当ててから、高さの変化のアニメーションを TWEEN できます。
私の質問は、高さの値を変更できるように、単一のポイント (キューブ ジオメトリ) を手動で選択するにはどうすればよいですか? GitHub で Stack Overflow と Three JS を調べましたが、そのプロセスを理解しているかどうかわかりません。渡されるデータに直接関連するように ID を割り当てています (WebGL がパーティクルに個別の名前/ID を追加することは知っていますが、私が行っていることにより直接関連するものが必要です)簡単にするために)。それはうまくいくようです。しかし、繰り返しになりますが、JS 開発者として、jQuery で .getElementById(id) と $('#'+id) を試しましたが、どちらも機能しません。Geometry オブジェクトは HTML DOM オブジェクトと同じように動作しないことを認識しているので、そこが苦労していると思います。
地球にデータ ポイントを追加するコード:
function addPoint(lat, lng, size, color, server) {
geometry = new THREE.Cube(0.75, 0.75, 1, 1, 1, 1, null, false, { px: true,
nx: true, py: true, ny: true, pz: false, nz: true});
for (var i = 0; i < geometry.vertices.length; i++) {
var vertex = geometry.vertices[i];
vertex.position.z += 0.5;
}
var point = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial ({
vertexColors: THREE.FaceColors
}));
var phi = (90 - lat) * Math.PI / 180;
var theta = (180 - lng) * Math.PI / 180;
point.position.x = 200 * Math.sin(phi) * Math.cos(theta);
point.position.y = 200 * Math.cos(phi);
point.position.z = 200 * Math.sin(phi) * Math.sin(theta);
if($('#'+server).length > 0) {
server = server+'b';
}
point.id = server;
point.lookAt(mesh.position);
point.scale.z = -size;
point.updateMatrix();
for (var i = 0; i < point.geometry.faces.length; i++) {
point.geometry.faces[i].color = color;
}
console.log(point.id);
scene.addObject(point);
}
戻って、 point.id を使用できないことはわかっています。これは、明らかに関数内でのみ参照されるためです。しかし、「Globe.id」、「Globe.object.id」、「object.id」を試しましたが、何も機能していないようです。それが可能であることはわかっていますが、機能する方法が見つからないようです。