DirectX Problem in Tutorial << Neueinsteiger

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von skyscater.

    DirectX Problem in Tutorial << Neueinsteiger

    Ich bin in DirectX total Neuling und wollte mal ein kleines Tut machen.(im Anhang) Es geht alles wunderbar bis Seite 12 wo es heißt man soll keine TransformedColored mehr verwenden sondern PositionColored. Und dieses alle austauschen. Denn genau ab diesm Zeitpunkt geht nix mehr. Wenn ich das mache funktioniert die ganze Sache nich mehr und im Tutorial wird nix näher beschrieben.
    Hier der Code (hab durch Converter laufen lassen)
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Collections.Generic
    2. Imports System.Text
    3. Imports System.Windows.Forms
    4. Imports System.Drawing
    5. Imports Microsoft.DirectX
    6. Imports Microsoft.DirectX.Direct3D
    7. Namespace dx3D
    8. Class MDXSampleApp
    9. Inherits System.Windows.Forms.Form
    10. Private device As Device
    11. Private verts As CustomVertex.PositionColored()
    12. 'Die Eckpunkte
    13. Private vertexBuffer As VertexBuffer
    14. 'container für eckpunkte siehe oben um in video ram zu machen
    15. Public Sub InitGfx()
    16. Try
    17. Me.ClientSize = New Size(800, 600)
    18. Me.Text = "DX MainWindow"
    19. AddHandler Me.KeyPress, New KeyPressEventHandler(AddressOf OnKeyPress)
    20. Dim pp As New PresentParameters()
    21. pp.Windowed = True
    22. 'gibt an dass device ein Fenster sein soll
    23. pp.SwapEffect = SwapEffect.Copy
    24. 'gibt an dass jedesmal der ganze bildschirm neu gezeichnet wird
    25. 'welcher bildschirm
    26. 'wo berechnet wird
    27. 'Fenster handle
    28. 'Praktisch selbe wie parameter 1
    29. device = New Device(Manager.Adapters.[Default].Adapter, DeviceType.Hardware, Me, CreateFlags.HardwareVertexProcessing, pp)
    30. 'parameter struktur
    31. 'Vertex...
    32. verts = New CustomVertex.PositionColored(2) {}
    33. verts(0).X = 150
    34. verts(0).Y = 50
    35. verts(0).Z = 0F
    36. verts(0).Color = Color.Red.ToArgb()
    37. verts(1).X = 250
    38. verts(1).Y = 250
    39. verts(1).Z = 0.5F
    40. verts(1).Color = Color.Green.ToArgb()
    41. verts(2).X = 50
    42. verts(2).Y = 250
    43. verts(2).Z = 0.5F
    44. verts(2).Color = Color.Honeydew.ToArgb()
    45. 'Da 3 Eck optional verts.Length
    46. vertexBuffer = New VertexBuffer(GetType(CustomVertex.PositionColored), 3, device, Usage.[WriteOnly], CustomVertex.PositionColored.Format, Pool.[Default])
    47. Dim stream As GraphicsStream = vertexBuffer.Lock(0, 0, 0)
    48. 'verts in den Buffer geben
    49. stream.Write(verts)
    50. vertexBuffer.Unlock()
    51. Catch ex As DirectXException
    52. MessageBox.Show("Failed to Init DirectX: " + ex.Message)
    53. Environment.[Exit](-1)
    54. End Try
    55. End Sub
    56. Public Sub Render()
    57. device.VertexFormat = CustomVertex.PositionColored.Format
    58. device.Clear(ClearFlags.Target, Color.Red, 0F, 0)
    59. 'Hier background property setzen
    60. device.BeginScene()
    61. device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 1, verts)
    62. device.SetStreamSource(0, vertexBuffer, 0)
    63. device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 1)
    64. device.EndScene()
    65. device.Present()
    66. End Sub
    67. Public Sub Shutdown()
    68. device.Dispose()
    69. End Sub
    70. Private Overloads Sub OnKeyPress(sender As Object, e As KeyPressEventArgs)
    71. If AscW(e.KeyChar) = CInt(Keys.Escape) Then
    72. Me.Close()
    73. End If
    74. End Sub
    75. End Class
    76. End Namespace



    Was mach ich falsch.... ich komm einfach nicht weiter und wollte aber das Teil schön Schritt für Schritt durchgehen
    Dateien
    • attachment.pdf

      (242,14 kB, 146 mal heruntergeladen, zuletzt: )


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Ist ja klar, TransformedColored sagt dir, dass du die Bildschirmkoordinaten angeben sollst, PositionColored spielt sich aber nun in der 3D Welt ab, aber dein Device weiß gar nicht, von wo es nach wo guckt, somit siehst du auch nichts->
    Du musst die View Matrix setzen...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    das hatte ich schon alles komm aber trotzdem nicht weiter...

    VB.NET-Quellcode

    1. device.Transform.View = Matrix.LookAtLH(New Vector3(0F, 3F, -5F), New Vector3(0F, 0F, 0F), New Vector3(0F, 1F, 0F))
    So wars im Tutorial. Doch nun ja ging trotzdem nicht... Dazu gabs auch noch world, projection. Hatte ich alles.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Versuch mal follgendes:
    Vertices:
    new Vector3(0f, 0f, 0f)
    new Vector3(10f, 0f, 0f)
    new Vector3(5f, 10f, 0f)

    Kamera:
    new Vector3(0f,30f, 0f) - ist die Position

    Setz außerdem den CullMode auf None
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    hatte das selbe problem du musst bei dem schritt auch die position der verticies änderrn:

    VB.NET-Quellcode

    1. verts(0).X = 0.0F
    2. verts(0).Y = 1.0F
    3. verts(0).Z = 0.5F
    4. verts(0).Color = Color.Yellow.ToArgb
    5. verts(1).X = 1.0F
    6. verts(1).Y = 0.0F
    7. verts(1).Z = 0.5F
    8. verts(1).Color = Color.Green.ToArgb
    9. verts(2).X = -1.0F
    10. verts(2).Y = 0.0F
    11. verts(2).Z = 0.5F
    12. verts(2).Color = Color.White.ToArgb


    und in der renderrutine:

    VB.NET-Quellcode

    1. m_Device.RenderState.Lighting = False

    setzten. Dann klapps.
    mfg.skyscater