.NET GUI

.NET Community für WPF, Silverlight und mehr!
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

Mehrere Viewport3D kombinieren

Letzter Beitrag 02-05-2010 19:05 von qtrya5. 2 Antworten.
Seite 1 von 1 (3 Treffer)
Beiträge sortieren: Zurück Weiter
  • 01-08-2010 0:50

    • qtrya5
    • Top 100 Mitwirkender
      Männlich
    • Registriert am 10-15-2008
    • Darmstadt
    • Beiträge 3
    • Punkte 15

    Mehrere Viewport3D kombinieren

    Hallo,

    ich habe ein Programm geschrieben, das das dynamische Laden von dreidimensionalen Objekten in eine gemeinsame Oberfläche ermöglicht. Dazu habe ich einzelne Xaml mit dem Root-Element Model3DGroup benutzt, die ich zur Laufzeit mit Me.Children.Add(myModelVisual3D) in einem Viewport3D kombiniere und dann anzeige. Bevor ich sie zusammenfüge kann ich sie mit ScaleX,Y,Z bzw. OffsetX,Y,Z noch positionieren bzw. in der Größe anpassen.

    Das funktioniert so weit ganz gut und auch erstaunlich schnell, aber nun hat mein Kunde den Wunsch, dass man in den dreidimensionalen Objekten Texte anzeigen und eventuell sogar eingeben können soll. Dazu müsste ich zum einen geschickter Weise Resourcen definieren und außerdem natürlich einen Viewport2DVisual3D verwenden. Beides geht unterhalb einer Model3DGroup nicht, das heißt mein Konzept stößt hier an seine Grenzen.

    Ich überlege nun, ob ich mit String-Verarbeitung zur Laufzeit aus mehreren Xaml mit Rootelement Viewport3D ein gemeinsames machen soll oder ob es vielleicht doch eine bessere Lösung gibt. Habt ihr irgendeine Idee? Wichtig ist, dass am Ende eine gemeinsame Camera existiert und die dreidimensionalen Objekte in einem Bild erscheinen, was wiederum voraussetzt, dass man sie weiterhin positionieren und in der Größe anpassen kann.

    Viele Grüße
    Florian
    Florian Dice
    Abgelegt unter: ,
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 01-29-2010 9:49 Antwort zu

    • qtrya5
    • Top 100 Mitwirkender
      Männlich
    • Registriert am 10-15-2008
    • Darmstadt
    • Beiträge 3
    • Punkte 15

    AW: Mehrere Viewport3D kombinieren

    Es scheint wirklich keine fertige Möglichkeit zum nachträglichen Kombinieren von Viewport3D zu geben, ich finde jedenfalls nichts. Das wundert mich, denn Anwendungen, in denen man etwas konstruiert wie z.B. ein Haus oder auch einfache didaktische Spielanwendungen für Kinder sind doch darauf angewiesen, einen Vorrat an fertigen dreidimensionalen Objekten zu haben, aus denen man dann zur Laufzeit etwas zusammen baut. Bei mir geht es zum Beispiel darum, für den Chemie-Unterricht das Zusammenbauen von Molekülen zu ermöglichen.

    Ich bin das Problem jetzt angegangen indem ich die Resources und die Viewport2DVisual3D getrennt von den ModelVisual3D speichere und zur Laufzeit alles in einen Viewport3D lade. Ist umständlich, weil ich mir für jedes einzelne dreidimensionale Objekt in einer Datenbank merken muss, welche Resources und Viewport2DVisual3D es braucht. Das hätte ich mir erspart, wenn ich für jedes Objekt einen eigenen Viewport3D hätte benutzen können. Der Vorteil ist andererseits jetzt, dass ich die Resourcen gleich mehrfach verwenden kann - ein Würfel hat ja immer die gleiche MeshGeometry3D.

    Hat vielleicht irgendjemand Erfahrung mit der Steuerung der Camera Position und Camera LookDirection mit Tastatur und Maus?

    Viele Grüße

    Florian

    Florian Dice
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
  • 02-05-2010 19:05 Antwort zu

    • qtrya5
    • Top 100 Mitwirkender
      Männlich
    • Registriert am 10-15-2008
    • Darmstadt
    • Beiträge 3
    • Punkte 15

    Tastatursteuerung in Viewport3D

    Hallo, noch ein Beitrag von mir, vielleicht interessiert sich ja doch jemand für die Programmierung von dreidimensionalen GUIs wie ich das gerade tue.

    Ich habe jetzt eine primitive Tastatur-Steuerung eingebaut, mit der ich mich drehen und zumindest in der Ebene in jede Richtung gehen kann. Dazu errechne ich in einem Kreis eine beliebige Anzahl von Punkten, z.B. 120,  und merke sie mir als Vektoren in einer Liste. Mit den Pfeiltasten rechts und links ändere ich die camera.LookDirection immer auf den nächstliegenden Vektor rechts oder links. So kann ich mich drehen.
    Um den Blick nach oben oder unten zu schwenken ändere ich camera.LookDirection.Y in drei Stufen ab. Das ist natürlich gemogelt, eigentlich müsste man wohl mit einer Rotationsmatrix arbeiten, damit auch in der Y-Richtung ein ganzer Kreis von Punkten entsteht. Da traue ich mich aber nicht ran, ich bin kein Mathematiker.

    Um mich fortzubewegen muss ich nur den Vektor im Kreis, auf den ich gerade gucke, zu meiner aktuellen Position hinzurechnen. Ich steuere das mit Shift+Pfeiltasten, wobei ich vorwärts, rückwärts und seitwärts gehen bzw. fliegen kann.

    Das ganze funktioniert natürlich etwas ruckartig, wobei die Bewegungen bei gehaltener Pfeiltaste eigentlich ganz flüssig sind. Ich kann auf jeden Fall meine dreidimensionalen Objekte von allen Seiten umfliegen, wenn auch nicht in Kurven.

    Ich würde mir jetzt noch wünschen das ganze auch mit der Maus bedienen zu können. Hat jemand eine Idee, wie ein sinnvolle Steuerung mit der Maus überhaupt funktionieren müsste? Ich kenne mich mit Spielen nicht aus, wie wird denn normalerweise eine Bewegung mit der Maus gesteuert?

    Hier die Funktion, mit der ich die Punkte im Kreis berechne. Der Radius sollte der gewünschten Schrittweite entsprechen, dann kann man bei der Fortbewegung den ganzen Vektor zu der aktuellen Position dazurechnen.

    Private ListOfLookDirections As New List(Of Vector3D)    ' als Klassen-Variable

    Private Sub CalculateLookDirections(ByVal noPoints As Integer, ByVal radius As Double)

    Dim alpha As Double = 2 * System.Math.PI / noPoints ' Winkel zwischen den Vektoren

    Dim actualVector As Vector3D

    For i = 0 To noPoints - 1

    actualVector.X = System.Math.Cos(i * alpha) * radius

    actualVector.Y = 0

    actualVector.Z = System.Math.Sin(i * alpha) * radius

    ListOfLookDirections.Add(actualVector)

    Next

    End Sub

    Florian Dice
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (3 Treffer)
Powered by Community Server (Commercial Edition)    69° - Internet-Agentur Nürnberg (ASP.NET, CMS, Webdesign)