Mesh erstellen(3ds) und in der umgebung darstellen/positionieren

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von mario2323.

    Mesh erstellen(3ds) und in der umgebung darstellen/positionieren

    Hallo liebe community.

    Ich bin vor einigen Tagen mit dem 3d Programmieren in VB mit Direct9 angefangen.

    Nun habe ich die erste Frage.

    Ich habe bis her noch nicht geschafft ein vormodiliertes Mesh (*.3ds[blender]) in meiner Umgebung darzustellen.

    Mein erster Ansatz war eigentlich der hier:

    VB.NET-Quellcode

    1. mesh.loadfromfile


    nur führt das zu errors.

    Frage nun. Wie macht man das Erstellen von Mesh´s richtig und wie lighte ich die richtig. Bisher habe ich nur in Autoit 3d programmiert, da ging das etwas einfacher.


    Wäre dankbar über Hilfestellungen

    Auch tuts, wo genau das beschrieben wird wären erwünscht.(PS: nach 1ner Stunde Googlen, habe ich nur halbe sachen rausgefunden[.x file ka was das heist] und so)


    Danke nochmals

    Mario2323
    nun nur noch eine wichtige Frage(für mich wichtig), wie positioniere ich den Mesh, sodass dieser sichtbar wird?

    , weil wenn ich jetzt das mesh geaddet habe, erscheint nichts.


    das war die letzte frage
    in all das Andere arbeite ich mich dann rein

    Mario2323
    Ich weiß jetzt nicht wie weit du bist...


    Also erst einmal musst du das Mesh natürlich erst mal rendern.
    Dazu rufst du im Rendervorgang (zwischen beginszene und endszene) die "DrawSubset(0)"-Methode auf.

    Um das Mesh zu positionieren, skalieren oder zu drehen musst du die "World"-Matrix in der "Transformation"-Property des devices verändern.
    Vielleicht hilft dir dieser Thread weiter.
    also meine render funktion ist wie folgt:

    VB.NET-Quellcode

    1. Public Sub RenderFrame()
    2. Try
    3. If Not Init Then Return
    4. With p_D3DDevice
    5. .Clear(ClearFlags.ZBuffer Or ClearFlags.Target, Color.Black, 1, 0)
    6. .BeginScene()
    7. .EndScene()
    8. .Present()
    9. End With
    10. Catch
    11. End Try
    12. addmesh()
    13. End Sub
    14. Public Sub addmesh()
    15. Dim map As Mesh = Mesh.FromFile("C:\v\map.x", MeshFlags.Dynamic, p_D3DDevice)
    16. End Sub


    der aufruf:
    [Form1 Class]

    VB.NET-Quellcode

    1. Public Class frmMain
    2. Inherits System.Windows.Forms.Form
    3. #Region " Vom Windows Form Designer generierter Code "
    4. Private engine As clsEngine
    5. Private running As Boolean = True
    6. Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. Dim t As New Threading.Thread(AddressOf Render)
    8. t.Start()
    9. End Sub
    10. Private Sub Render()
    11. Do While running
    12. Try
    13. engine.UpdateFrame()
    14. engine.RenderFrame()
    15. Catch stopexp As Threading.ThreadAbortException
    16. Return
    17. End Try
    18. Loop
    19. End Sub
    20. Private Sub frmMain_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    21. running = False
    22. End Sub
    23. Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    24. If e.KeyData = Keys.Escape Then Me.Close()
    25. End Sub
    26. End Class


    nur kommt ist kein mesh sichtbar.

    ich glaube, weil ich den mesh keine position gegeben habe.

    Mario2323
    Also erst einmal ist es Quatsch das Mesh bei jedem Renderdurchlauf neu zu laden. :D
    Definiere ein mesh in deiner engine ("Private m as mesh" oder so), das du am start lädst (Mesh.FromFile("C:\v\map.x", MeshFlags.Dynamic, p_D3DDevice)).

    "Addmesh" kommt weg. Die Renderfunktion sieht dann wie folgt aus:

    VB.NET-Quellcode

    1. Public Sub RenderFrame()
    2. Try
    3. If Not Init Then Return
    4. With p_D3DDevice
    5. .Clear(ClearFlags.ZBuffer Or ClearFlags.Target, Color.Black, 1, 0)
    6. .BeginScene()
    7. m.DrawSubset(0)
    8. .EndScene()
    9. .Present()
    10. End With
    11. Catch
    12. End Try
    13. End Sub