3D Objekte mit DirectX erstellen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    3D Objekte mit DirectX erstellen

    Moin,

    ich möchte mir eigene Software für mein Laser programmieren. Das auch kein Problem, jedoch möchte ich zudem eine 3D Simulation der Show auch noch implemetieren.
    Meine Frage ist nun ob man dafür fundierte DirectX Kenntnisse haben muss, oder ob es vergleichbar eher einfach ist soetwas zu realisieren. Bisher habe ich noch null DirectX erfahrung, deswegen wäre ich für eine Info sehr dankbar.
    Im Endeffekt möchte ich sowas haben:
    Bild1 , Bild2

    Es soll nicht gut aussehen, es geht mir nur um die visuelle Darstellung. Im Grunde habe ich eine Ausgangsform z.B. im Kreis angeordnete Kreise und diese müsste ich ja einfach von einem Ausgangspunkt bis zum Endpunkt immer weiter vergörßern. Farbig soll es nicht sein, da ich nur einen einfarbigen Laser habe!
    Mit DX lässt sich sowas wirklich sehr einfach machen.

    Wie ich verstanden habe brauchst du:
    - einen Zylinder (oder war es doch nur Ringe die hinterenander geordnet eine art zylinder ergeben?)
    - damit ein Device
    - fertig! :D


    VB.NET-Quellcode

    1. Public Class LaserGraphics
    2. Private WithEvents targetcontrol As Control
    3. Private device As Device
    4. Private camera As New Vector3(5, 5, 5)
    5. Private rotation As New Vector3(0, 0, 0)
    6. Public laser As Mesh
    7. Public Sub New(ByRef target_control As Control)
    8. targetcontrol = target_control
    9. Dim present As New PresentParameters()
    10. present.BackBufferCount = 1
    11. present.BackBufferFormat = Format.A8R8G8B8
    12. present.MultiSample = MultiSampleType.FourSamples
    13. present.SwapEffect = SwapEffect.Discard
    14. present.Windowed = True
    15. device = New Direct3D.Device(0, DeviceType.Hardware, targetcontrol, CreateFlags.SoftwareVertexProcessing, present)
    16. device.RenderState.Lighting = False
    17. device.RenderState.CullMode = Cull.None
    18. device.RenderState.FillMode = FillMode.Solid
    19. laser = Mesh.Cylinder(device, 1, 1, 10000, 25, 1)
    20. device.Transform.Projection = Matrix.PerspectiveFovLH(Math.PI / 4, targetcontrol.Width / targetcontrol.Height, 0.1, 1000)
    21. device.Transform.World = Matrix.RotationYawPitchRoll(rotation.X, rotation.Y, rotation.Z)
    22. device.Transform.View = Matrix.LookAtLH(camera, New Vector3(0, 0, 0), New Vector3(0, 1, 0))
    23. End Sub
    24. Private Sub Render() Handles targetcontrol.Paint
    25. device.Clear(ClearFlags.Target, Color.Black, 1, 0)
    26. device.BeginScene()
    27. laser.DrawSubset(0)
    28. device.EndScene()
    29. device.Present()
    30. Try
    31. targetcontrol.Invalidate()
    32. Catch
    33. End Try
    34. End Sub
    35. Public Sub Set_new_laser(ByVal radius1 As Single, ByVal radius2 As Single, ByVal length As Single)
    36. laser = Mesh.Cylinder(device, radius1, radius2, length, 25, 1)
    37. End Sub
    38. Public Property CameraPosition() As Vector3
    39. Get
    40. Return camera
    41. End Get
    42. Set(ByVal value As Vector3)
    43. If Not value = New Vector3(0, 0, 0) Then
    44. camera = value
    45. device.Transform.View = Matrix.LookAtLH(camera, New Vector3(0, 0, 0), New Vector3(0, 1, 0))
    46. End If
    47. End Set
    48. End Property
    49. Public Property RotationYawPitchRoll() As Vector3
    50. Get
    51. Return rotation
    52. End Get
    53. Set(ByVal value As Vector3)
    54. rotation = value
    55. device.Transform.World = Matrix.RotationYawPitchRoll(rotation.X, rotation.Y, rotation.Z)
    56. End Set
    57. End Property
    58. End Class
    Nunja einen Zylinder nicht direkt, der ist ja immer gleich breit. Ich habe eine Ausgangsform, nehmen wir der einfachkeitshalber mal eine Kreis.
    Jetzt haben wir einen Fixpunkt wo der Kreisradius 1 ist. Aber in einer bestimmten Distanz ist der Radius dann aber z.B.: 15, weil sich der Laser ja von diesem Fixpunkt Trapezartig ausbreitet. Noch einfacherer wohl ein Recheck, es ist dann eine Pyramide die horizontal liegt und die Spitze der Pyramide ist quasie die Austritt des Lasers.