GDI3D - 3D auch ohne DirectX

    • Beta

    Es gibt 92 Antworten in diesem Thema. Der letzte Beitrag () ist von Quadsoft.

      Find ich ja echt krass von dir, dass du sowas gebaut hast,
      aber nach wie vor würd ich, wenn jemand unbedingt in eine Anwendung 3D integrieren will,
      DirectX oder viel viel einfacher: XNA vewenden.

      Mit XNA brauchst du auch nur ein paar Zeilen Code, nur dass es einfach viel mehr leisten kann.

      Aber gut, für Kleine Sachen ist das auch gut ;)
      Respekt, war bestimmt ne heiden Arbeit.


      Ich find auch, dass das noch viel Potential hat. Du könntest es noch viel mehr ausweiten, Z-Buffer, usw. was halt noch fehlt
      einbauen, es optimieren, dass es noch mehr Polygone rendern kann ohne Leistungsschwankungen und vielleicht Shader-Integration ;)

      MfG
      R
      aber nach wie vor würd ich, wenn jemand unbedingt in eine Anwendung 3D integrieren will,
      DirectX oder viel viel einfacher: XNA vewenden.
      Hat der TE bereits selbst gesagt...

      Mit XNA brauchst du auch nur ein paar Zeilen Code, nur dass es einfach viel mehr leisten kann.
      Das hört sich jetzt an, als wäre es auch Leistungsfähiger als DirectX, was wohl kaum stimmen kann...

      noch viel mehr ausweiten, Z-Buffer
      Ist meines Wissens bereits integriert...

      mehr Polygone rendern kann ohne Leistungsschwankungen
      Das kann auch DirectX und somit auch XNA nicht...

      Shader-Integration ;)


      Allgemein entwicklet der TE das hier nicht mehr weiter, außerdem ist soetwas nicht allzu einfaach...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Ich bekomme immer, wenn ich eine der .obj-Dateien laden will diesen Fehler:

      Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Ungültige Konvertierung von der Zeichenfolge 0,171101 in Typ Single.
      Wie könnte ich den machen das sich ein Objekt nach links bzw. nach rechts bewegt?

      Edit: Ich weiss schon, dass das hier mindestens hndertmal erwähnt wurde, aber irgendwie wäre es mit textur wirklich cool...

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Epic“ ()

      zu dem?:
      Wie könnte ich den machen das sich ein Objekt nach links bzw. nach rechts bewegt?

      sollte eine Transformations Matrix geben, davon (M)41,(M)42,(M)43 auf X,Y und Z ändern, evtl. gibt es auch eine Translate Methode bzw. Funktion, was du dann einfacher verwenden kannst ;)
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      was denn sonst :P
      ZBuffer ist nicht implementiert, das müsste noch jemand erledigen und wie bereits so oft geschrieben, der TE macht nichts mehr weiter, deshalb sollte auch der SourceCode verfügbar sein, damit jeder schön selber damit rumspielen kann...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      guck dir doch mal SampleMesh auf der ersten Seite an...
      Davon einfach mehrere...also SampleMesh1, SampleMesh2 z.B....
      Falls es dabei um dasselbe Obekt geht:

      Sample_Graphics.Transform_World = Matrix.Rotate_Y_Axis(Now.Millisecond * (Math.PI * 2) / 1000)
      ' Das Mesh wird gezeichnet
      Sample_Graphics.Draw_Mesh(e.Graphics, Sample_Mesh, Color.FromArgb(240, 100, 20), GDI3D.Graphics3D.DrawMode.Fill Or GDI3D.Graphics3D.DrawMode.Wireframe)

      Einfach die World Transformation ändern, auf die Position des zweiten Objekts und die Draw_Mesh Methode ebenfalls ein zweites mal aufrufen...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      Fehler?

      Quellcode

      1. Der Typ "GDI3D.Mesh" in der Assembly "GDI3D, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" konnte nicht geladen werden.



      Sourcecode:
      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports GDI3D
      2. Public Class Form1
      3. Private Sample_Graphics As Graphics3D
      4. Private Sample_Mesh As Mesh
      5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      6. Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer, True)
      7. ' Das Mesh wird geladen
      8. Sample_Mesh = Mesh.FromFile(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\Raumschiff.obj")
      9. ' Initialisierung der Graphics3D-Instanz und der Matrizen
      10. Sample_Graphics = New Graphics3D(Me.ClientSize)
      11. Sample_Graphics.Transform_World = Matrix.Identity
      12. Sample_Graphics.Transform_View = Matrix.Translation(0, 0, -5)
      13. Sample_Graphics.Transform_Projection = Matrix.Projection(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 0.1, 1000)
      14. End Sub
      15. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
      16. ' Das Mesh soll sich um die Y-Achse drehen (Wichtig: Die Winkel sind in Radiant anzugeben)
      17. Sample_Graphics.Transform_World = Matrix.Rotate_Y_Axis(Now.Millisecond * (Math.PI * 2) / 1000)
      18. ' Das Mesh wird gezeichnet
      19. Sample_Graphics.Draw_Mesh(e.Graphics, Sample_Mesh, Color.FromArgb(240, 100, 20), GDI3D.Graphics3D.DrawMode.Fill Or GDI3D.Graphics3D.DrawMode.Wireframe)
      20. Me.Invalidate()
      21. End Sub
      22. Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
      23. ' Da sich nun das Sichtfenster verändert hat, muss auch die Zeichenfläche und
      24. ' das Seitenverhältnis der Projektion verändert werden
      25. If Sample_Graphics IsNot Nothing Then
      26. Sample_Graphics.Bounds = Me.ClientSize
      27. Sample_Graphics.Transform_Projection = Matrix.Projection(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 0.1, 1000)
      28. End If
      29. End Sub
      30. End Class


      Hat jemand eine Idee?