WPF 3D - カメラの視野にModelVisual3Dフィット?
-
22-08-2019 - |
質問
私は、寸法はので、私は関係なく、どのようなモデルのサイズは、カメラは常にそれのすべてを見ることができることを確認する必要がありXMLから輸入されています直方体を持っています。これは、プレビューの目的です。私はおそらく明確にするためのスケールを示す上面の上にキャプションをレンダリングします。
私は私がModelVisual3DはカメラのFieldOfView
または多分ViewPort3D自体の境界内に収まるかどうか私に教えてくれるいくつかの機能が必要だと思う。
これまでのところ私は、静的なコールバックを(寸法プロパティがDependencyProperty
sある)寸法のプロパティは以下のように定義変更したときに持っています。それは現時点ではかなりの粗だが、あなたは私が探しているアイデアを得ます。コメントアウトセクションでは、おおよそ示して私が探しているロジックの種類
private static void OnCubeDimensionsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!valueSemaphore)
{
//while(mainModel.WillClip(mainCamera))
//{
// mainCamera.FieldOfView--;
//}
valueSemaphore = true;
double propertyValue = 0.0;
Product3D p = d as Product3D;
switch (e.Property.Name)
{
case "CubeHeight":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 8;
p.CubeHeight = propertyValue;
break;
case "CubeWidth":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 5.3;
p.CubeWidth = propertyValue;
break;
case "CubeDepth":
propertyValue = (double.Parse(e.NewValue.ToString()) / 100) * 2.6;
p.CubeDepth = propertyValue;
break;
}
valueSemaphore = false;
}
}
は、誰もがコメントアウトされた部分は、私は永遠に感謝するだろうでどこに行くべきかを知っていれば。
事前に感謝します。
解決
あなたはビュー平面上の立方体の2D投影の範囲であるのホールドを取得するために必要なもの。その後、キューブの全体が表示されているかどうかを確認するために最小値と最大値X&Yの値の簡単なチェックを行うことができます。
程度まで許容因子を追加する任意の丸め誤差の世話をします。
私はここのからのコードの該当部分になりそうだ何をコピーしました。あなたはそれに応じてビューポートのサイズを設定することができます。
public static Rect Get2DBoundingBox(ModelVisual3D mv3d)
{
bool bOK;
Matrix3D m = MathUtils.TryWorldToViewportTransform(vpv, out bOK);
bool bFirst = true;
Rect r = new Rect();
if (mv3d.Content is GeometryModel3D)
{
GeometryModel3D gm3d = (GeometryModel3D) mv3d.Content;
if (gm3d.Geometry is MeshGeometry3D)
{
MeshGeometry3D mg3d = (MeshGeometry3D)gm3d.Geometry;
foreach (Point3D p3d in mg3d.Positions)
{
Point3D pb = m.Transform(p3d);
Point p2d = new Point(pb.X, pb.Y);
if (bFirst)
{
r = new Rect(p2d, new Size(1, 1));
bFirst = false;
}
else
{
r.Union(p2d);
}
}
}
}
所属していません StackOverflow