Frage

Ich habe einen Würfel Rendering in einem Viewport3D und ich brauche einen Weg zu kennen, um herauszufinden, ob alle der Würfel für den Benutzer sichtbar sind.

Edit: Nur um klar zu sein, .. ich spreche nicht wegen der Nah- / Fern-Ebene Abstand hier über Clipping. Ich meine, die Würfel zu hoch oder breit sind im Kamera Sichtfeld zu passen.

Jede Hilfe wäre massiv geschätzt!

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich kann nicht eine Lösung anbieten, aber ich kann vielleicht zeigen Sie in der richtigen Richtung.

Was Sie halten erhalten müssen der das Ausmaß der 2D-Projektion des Würfels auf der Ansichtsebene. Sie können dann eine einfache Überprüfung der Min- und Max-X & Y-Werte, um zu sehen, ob die Gesamtheit der Würfel sichtbar ist.

einen Toleranzfaktor in dem Maße Das Hinzufügen einer Rundungsfehler kümmern.

EDIT: Ich habe gerade eine Google-Suche für "2D-Projektion WPF" gemacht und dieses Link kam. Es sieht aus wie es adressiert, was Sie wollen.

WEITERE EDIT: Ich habe den entsprechenden Abschnitt von Code aus dem obigen Link hier kopiert

.
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);
                }
            }
        }
    }

    return r;
}

Andere Tipps

Ich erinnere mich an ein Tutorial über Stumpfes auf flipcode Culling.

Flipcode - Frustum Culling

Ich hoffe, es hilft.

Ich kann mich so etwas wie dies zu tun:

Überprüfen Sie den nächstgelegenen Punkt des Würfels an der Kamera bezogen und überprüfen, ob es von der nahen Clipping-Ebene abgeschnitten ist wird. Der nächste Punkt von der Kamera, die ich denken kann, ist einer dieser Punkte, um den Würfel zu komponieren. So müssen Sie jede der 6 Punkte des Würfels überprüfen und prüfen, ob sie beschnitten werden. Wenn keiner von ihnen sind, dann Würfel, wenn vollständig sichtbar Oh, und natürlich müssen Sie prüfen, gegen die weit Clippingebene zu.

Der Code ist einfach:

for each point of cube do
    if !(point is in farClippingPlane and nearClippingPlane)
       return false;
    end if
end for
return true
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top