Monotouch と openTK を使用して iOS 用のパーティクル エンジンを作成しています。私のアプローチは、各パーティクルの座標を投影してから、この画面の位置に正しくスケーリングされたテクスチャ付きの四角形を書き込むことです。
正常に動作しますが、スプライトが正しくオーバードローされ、シーン内の 3D オブジェクトによってオーバードローされるように、正しい深度値を計算するのに問題があります。
これは私が今日使用しているコードです:
//d=distance to projection plane
float d=(float)(1.0/(Math.Tan(MathHelper.DegreesToRadians(fovy/2f))));
Vector3 screenPos=Vector3.Transform(ref objPos,ref viewMatrix, out screenPos);
float depth=1-d/-screenPos.Z;
次に、上で計算した深度値を z 座標として配置する画面座標に三角ストリップを描画します。
結果はほぼ正しいですが、完全ではありません。どうにかして近距離と遠距離のクリッピング プレーンを考慮する必要があると思います (私の場合、近距離は 1、遠距離は 10000 です) が、その方法がわかりません。正確な結果が得られずに、さまざまな方法やアルゴリズムを試しました。
これについて何か助けていただければ幸いです。