背景: DirectX 9.0 Managed Libraries を使用して、3D ポイントの配列を 2D 画面座標に変換しています。速度を上げるために、UnsafeNativeMethods を使用してすべての変換を行います。
問題:
カスタムのライン クリッピング関数を使用すると、例外をスローせずにアプリケーションが停止します。キャッチできない System.ExecutionEngineException
. クリッピング関数の最後の 2 行のために、発生に絞り込みました。
List<Vector3> verticesAfterClipping = new List<Vector3>;
public unsafe void ClipLine(Line lineToClip)
{
this.verticesAfterClipping.Clear();
// Clipping algorithm happens here... (this is psuedo-code of what it does)
foreach(Vertex in lineToClip.Vertices)
{
bool thisIsClipped = // Set to whether this vertex is clipped
bool lastWasClipped = // Set to whether last vertex was clipped
if(thisIsClipped == false && lastWasClipped == true)
{
verticesAfterClipping.Add( /* intersection on clipping plane */ );
verticesAfterClipping.Add( /* thisVertex */ );
}
else if (thisIsClipped == false && lastWasClipped == false)
{
verticesAfterClipping.Add( /* thisVertex */ );
}
else if (thisIsClipped == true && lastWasClipped == false)
{
verticesAfterClipping.Add(/* intersection on clipping plane */);
}
}
// THIS IS WHERE BAD THINGS HAPPEN
lineToClip.Vertices = new Vertex[verticesAfterClipping.Count];
verticesAfterClipping.CopyTo(lineToClip.Vertices, 0);
}
verticesAfterClipping
リストがlineToClip
頂点にコピーされると、オブジェクトlineToClip
は UnsafeNativeMethod に渡され、これらの頂点が 2D 頂点に変換されます。デバッグモードでステップスルーしたときに見ることができるすべてのものから、死ぬまで完全に正常に動作しています。
私は単に何が間違っているのか理解できません。どんな助けでも大歓迎です。