Three.js ライブラリを使用して、画面に多数の色付きポイント (たとえば、約 50 万から 100 万) を表示しようとしています。可能であれば、WebGL レンダラーではなく Canvas レンダラーを使用しようとしています (Web ページは Google Earth クライアントの吹き出しにも表示されます。これは、Canvas レンダラーでは機能するようですが、WebGL レンダラーでは機能しないようです)。
hereからコードを変更することで、少数のポイント (数万) について問題を解決しましたが、それを超えてスケーリングするのに問題があります。
しかし、WebGL とパーティクル システムを使用した次のコードでは、50 万個のランダム ポイントを色なしでレンダリングできます。
...
var particles = new THREE.Geometry();
var pMaterial = new THREE.ParticleBasicMaterial({
color: 0xFFFFFF,
size: 1,
sizeAttenuation : false
});
// now create the individual particles
for (var p = 0; p < particleCount; p++) {
// create a particle with randon position values,
// -250 -> 250
var pX = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
pY = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
pZ = Math.random() * POSITION_RANGE - (POSITION_RANGE / 2),
particle = new THREE.Vertex(
new THREE.Vector3(pX, pY, pZ)
);
// add it to the geometry
particles.vertices.push(particle);
}
var particleSystem = new THREE.ParticleSystem(
particles, pMaterial);
scene.add(particleSystem);
...
上記のコードのパフォーマンスが向上した理由は、パーティクル システムによるものですか? ドキュメントで読んだことから、パーティクル システムは WebGL レンダラーでのみ使用できるようです。
だから私の質問は
a) Canvas レンダラーを使用してそのような多数のパーティクルをレンダリングできますか? それとも常に WebGL/ParticleSystem バージョンよりも遅くなりますか? もしそうなら、どうすればそれを行うことができますか?パフォーマンスを向上させるために使用するオブジェクトやトリックは?
b) 一部の機能を放棄した場合に到達できる妥協点はありますか? つまり、個々のポイントに色を付ける必要がなくなった場合でも、大規模なデータセットに Canvas レンダラーを使用できますか?
c) Canvas をあきらめて WebGL バージョンを使用する必要がある場合、個々のポイントの色を変更することは可能ですか? ParticleSystem に渡されたマテリアルによって色が設定され、すべてのポイントの色が設定されているようです。