私は現在、フラッシュで小さな3Dパーティクルエンジンを構築しており、スプライトを使用しています。
各スプライトの位置を設定するには、以下のprojectVector関数を使用しています。(viewTransformマトリックスは、パースペクティブプロジェクションマトリックスと連結されたパーティクルワールドマトリックスです)
var projectedPoint:Vector3D = Utils3D.projectVector(viewTransform, point);
sprite.x = projectedPoint.x;
sprite.y = projectedPoint.y;
これは非常にうまく機能し、スプライトを正確に配置する必要があります:D私が抱えている問題は、カメラからの距離に基づいて各パーティクルのスケールを計算する方法を理解しようとしていることです。
sprite.scaleX = sprite.scaleY = ??
透視投影行列を使用していなかった場合、通常は次のようにします。
var scaleRatio:Number = (focus * zoom)/(focus + particle.globalz);
particle.depth = scaleRatio;
sprite.x = particle.globalx * scaleRatio;
sprite.y = particle.globaly * scaleRatio;
// set scale..
sprite.scaleX = sprite.scaleY = scaleRatio;
エースとなる透視投影行列を使用して「scaleRatio」を計算する方法を教えてくれる人がいたら
ありがとう!