Direct3D Texturen

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Direct3D Texturen

    Soooo,
    liebes Forum Könnt ihr mir bei filgendem Code :

    VB.NET-Quellcode

    1. Imports Microsoft.DirectX
    2. Imports Microsoft.DirectX.Direct3D
    3. Public Class Form1
    4. Public bmp As Texture
    5. Public Shared device As Microsoft.DirectX.Direct3D.Device
    6. Public Sub Initialize()
    7. Dim present As PresentParameters = New PresentParameters
    8. present.Windowed = True 'we?ll draw on a window
    9. present.SwapEffect = SwapEffect.Discard 'discuss later
    10. device = New Microsoft.DirectX.Direct3D.Device(0, DeviceType.Hardware, Me, CreateFlags.HardwareVertexProcessing, present)
    11. device.RenderState.CullMode = Cull.Clockwise & Cull.CounterClockwise
    12. device.RenderState.Lighting = False
    13. End Sub
    14. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    15. kameraPosition = New Vector3(100, 500, 200)
    16. Kamera()
    17. End Sub
    18. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    19. Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque, True) 'Do not draw form?s background\
    20. Me.Height = 600
    21. Me.Width = 800
    22. Me.Text = "HI!!"
    23. Initialize()
    24. kameraPosition = New Vector3(0, 180, 0)
    25. kameratarget = New Vector3(400, 0, 400)
    26. Kamera()
    27. End Sub
    28. Public yhigh As Integer = 31
    29. Public richtung As Boolean = True
    30. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    31. If richtung = True Then
    32. yhigh = yhigh + 1
    33. Else
    34. yhigh = yhigh - 1
    35. End If
    36. If yhigh > 300 Then
    37. richtung = False
    38. End If
    39. If yhigh < 1 Then
    40. richtung = True
    41. End If
    42. Dim vertices1 As CustomVertex.PositionColored() = New CustomVertex.PositionColored(0 To 2) {} 'create an array of vertices
    43. vertices1(0).Position = New Vector3(0, 0, 0)
    44. vertices1(0).Color = Color.Green.ToArgb 'encode color in Argb
    45. vertices1(1).Position = New Vector3(0, 0, 5000)
    46. vertices1(1).Color = Color.Silver.ToArgb
    47. vertices1(2).Position = New Vector3(5000, 0, 0)
    48. vertices1(2).Color = Color.Silver.ToArgb
    49. Dim vertices2 As CustomVertex.PositionColored() = New CustomVertex.PositionColored(0 To 2) {} 'create an array of vertices
    50. vertices2(0).Position = New Vector3(5000, 0, 5000)
    51. vertices2(0).Color = Color.Green.ToArgb 'encode color in Argb
    52. vertices2(1).Position = New Vector3(0, 0, 5000)
    53. vertices2(1).Color = Color.Silver.ToArgb
    54. vertices2(2).Position = New Vector3(5000, 0, 0)
    55. vertices2(2).Color = Color.Silver.ToArgb
    56. device.Clear(ClearFlags.Target, Color.Aqua, 1.0, 0)
    57. device.BeginScene() 'all drawings after this line
    58. device.VertexFormat = CustomVertex.PositionColored.Format
    59. device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices1)
    60. device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices2)
    61. device.EndScene() 'all drawings before this line
    62. device.Present()
    63. Me.Invalidate() 'redraw
    64. End Sub
    65. 'kamera
    66. Public Shared view As Matrix
    67. Public kameraPosition As Vector3
    68. Public kameratarget As Vector3
    69. Public Sub Kamera()
    70. Dim up As New Vector3(0, 1, 0)
    71. Dim projection As Matrix = Matrix.PerspectiveFovRH(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 1, 8000)
    72. view = Matrix.LookAtRH(kameraPosition, kameratarget, up)
    73. device.Transform.View = view
    74. device.Transform.Projection = projection
    75. End Sub
    76. '
    77. End Class


    Bitte eine Möglichkeit erklären meine Plolygone zu texturieren?
    Hab gar keine Idee wie ich anfangen soll. :whistling:
    Hi
    Einfach vor dem Renderaufruf der Polygone die Textur mit SetTexture(0, texture) setzten. Anschließend wieder auf Nothing setzen, da sie sonst für den nächsten Rendervorgang erneut gesetzt wird.

    VB.NET-Quellcode

    1. device.SetTexture(0, texture1)
    2. device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices1)
    3. device.SetTexture(0, texture2)
    4. device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices2)

    Gruß
    ~blaze~
    Hi,

    erst mal ändere deinen Vertex-Typ in PositionTextured - dann brauchst du keine Farbe mehr für deine Vertices, sondern Texturkoordinaten (siehe hier). Dann lädst du über die TextureLoader-Klasse ein Texture-Objekt und setzt es über die SetTexture-Methode deiner Device-Instanz als aktuelle Textur. Ein in meinen Augen gutes Tutorial (leider nur auf Englisch) gibt es hier.

    MfG
    Ach ja das mit den PositionTextured hatte ich vergessen zu schreiben.
    Es empfiehlt sich übrigens, die Vertices in einer Schleife o.ä. und mit Zuhilfenahme einer abstrakten Klasse oder eines Interfaces zu rendern. Dadurch kannst du bestimmte Änderungen vornehmen, ohne deinen kompletten Code umschreiben zu müssen.

    Gruß
    ~blaze~
    Also ich habs durch rumprobieren Rausbekommen hier der Code:

    VB.NET-Quellcode

    1. Imports Microsoft.DirectX
    2. Imports Microsoft.DirectX.Direct3D
    3. Public Class Form1
    4. Public bmp As Texture
    5. Public Shared device As Microsoft.DirectX.Direct3D.Device
    6. Public Sub Initialize()
    7. Dim present As PresentParameters = New PresentParameters
    8. present.Windowed = True 'we?ll draw on a window
    9. present.SwapEffect = SwapEffect.Discard 'discuss later
    10. device = New Microsoft.DirectX.Direct3D.Device(0, DeviceType.Hardware, Me, CreateFlags.HardwareVertexProcessing, present)
    11. device.RenderState.CullMode = Cull.Clockwise & Cull.CounterClockwise
    12. device.RenderState.Lighting = False
    13. End Sub
    14. Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    15. kameraPosition = New Vector3(100, 500, 200)
    16. Kamera()
    17. End Sub
    18. Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    19. Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque, True) 'Do not draw form?s background\
    20. Me.Height = 600
    21. Me.Width = 800
    22. Me.Text = "HI!!"
    23. Initialize()
    24. kameraPosition = New Vector3(-100, 180, -100)
    25. kameratarget = New Vector3(1000, 0, 4000)
    26. Kamera()
    27. End Sub
    28. Public yhigh As Integer = 31
    29. Public richtung As Boolean = True
    30. Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    31. If richtung = True Then
    32. yhigh = yhigh + 1
    33. Else
    34. yhigh = yhigh - 1
    35. End If
    36. If yhigh > 300 Then
    37. richtung = False
    38. End If
    39. If yhigh < 1 Then
    40. richtung = True
    41. End If
    42. Dim texte As Texture = TextureLoader.FromFile(device, "C:\Users\Jonas\Pictures\gbs\textur.jpg")
    43. Dim vertices1 As CustomVertex.PositionNormalTextured() = New CustomVertex.PositionNormalTextured(0 To 2) {} 'create an array of vertices
    44. vertices1(0).Position = New Vector3(1000, 0, 4000)
    45. vertices1(1).Position = New Vector3(2000, 0, 4000)
    46. vertices1(2).Position = New Vector3(0, 2000, 4000)
    47. vertices1(0).Tv = 500
    48. vertices1(0).Tu = 500
    49. vertices1(1).Tu = 500
    50. vertices1(2).Tu = 200
    51. vertices1(2).Tv = 200
    52. device.Clear(ClearFlags.Target, Color.Aqua, 1.0, 0)
    53. device.BeginScene() 'all drawings after this line
    54. device.VertexFormat = CustomVertex.PositionNormalTextured.Format
    55. device.SetTexture(0, texte)
    56. device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices1)
    57. device.EndScene() 'all drawings before this line
    58. device.Present()
    59. Me.Invalidate() 'redraw
    60. End Sub
    61. 'kamera
    62. Public Shared view As Matrix
    63. Public kameraPosition As Vector3
    64. Public kameratarget As Vector3
    65. Public Sub Kamera()
    66. Dim up As New Vector3(0, 1, 0)
    67. Dim projection As Matrix = Matrix.PerspectiveFovRH(Math.PI / 4, Me.ClientSize.Width / Me.ClientSize.Height, 1, 8000)
    68. view = Matrix.LookAtRH(kameraPosition, kameratarget, up)
    69. device.Transform.View = view
    70. device.Transform.Projection = projection
    71. End Sub
    72. '
    73. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jonichecker“ () aus folgendem Grund: Geschaft

    device.RenderState.CullMode = Cull.Clockwise & Cull.CounterClockwise
    = Falsch :P

    VB.NET-Quellcode

    1. device.RenderState.CullMode = Cull.Clockwise Or Cull.CounterClockwise

    wäre richtig...

    außerdem solltest du die Textur sowie die Vertices nicht im Paint Event deklarieren(Performance sache...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    evtl so?:

    VB.NET-Quellcode

    1. Dim fs As New IO.FileStream(datei)
    2. TextureLoader.FromStream(fs)

    (das Bild kannst du nicht als normalen Byte Array - mit den Farbwerten - übergeben)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---