Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   C# [DirectX] Dynamisch X-Meshs rendern (https://www.delphipraxis.net/122211-%5Bdirectx%5D-dynamisch-x-meshs-rendern.html)

TurboMartin 11. Okt 2008 11:01


[DirectX] Dynamisch X-Meshs rendern
 
Hallo DP,
ich versuche gerade verschieden viele Meshs in eine Szene zu rendern. Dafür habe ich es jetzt schon einmal mit folgendem Code (es ist eine Komponente) probiert:
Code:
public IntPtr    RenderControl;
public String[]  XFiles;
private Device    device;
private Mesh      m_Mesh;
private Material[] m_MeshMaterials;
private Texture[] m_MeshTextures;
private Vector3    v_CurrMeshPos = new Vector3();
public int       Height = 700;
public int       Width = 300;

public bool InitializeGraphics()
{
    PresentParameters pres = new PresentParameters();
    pres.Windowed = true;
    pres.SwapEffect = SwapEffect.Discard;

    device = new Device(0, DeviceType.Hardware,
                        RenderControl, CreateFlags.SoftwareVertexProcessing, pres);

    LoadMesh("MeinMesh.x");

    return true;
}

public void Render()
{
    device.Clear(ClearFlags.Target, Color.Silver, 1.0F, 0);
    device.BeginScene();


    InitializeCamera();
    InitializeLights();

    DrawMesh(v_CurrMeshPos);


    device.EndScene();
    device.Present();
}


public void DisposeGraphics()
{
    device.Dispose();
}

private void InitializeCamera()
{
    Vector3 cameraPos = new Vector3(0, 0, -150f);
    Vector3 cameraTarget = new Vector3();
    Vector3 cameraUp = new Vector3(0, 1, 0);

    device.Transform.View = Matrix.LookAtLH(cameraPos, cameraTarget, cameraUp);
             
    float fov = (float) Math.PI / 4;
    float aspectRatio = Width / Height;
    float zNear = 1;
    float zFar = 1000;
             
    device.Transform.Projection = Matrix.PerspectiveFovLH(fov, aspectRatio, zNear, zFar);
}

private void InitializeLights()
{
    device.RenderState.Lighting = false;
    device.RenderState.Ambient = Color.White;
}

private void DrawMesh(Vector3 v3Position)
{
    device.Transform.World = Matrix.Translation(v3Position);

    for (int i = 0; i < m_MeshMaterials.Length; i++)
    {
        device.Material = m_MeshMaterials[i];
        device.SetTexture(0, m_MeshTextures[i]);
        m_Mesh.DrawSubset(i);
    }
}

public void LoadMesh(string file)
{
    ExtendedMaterial[] mtrl;
    GraphicsStream adj;

    m_Mesh = Mesh.FromFile(file, MeshFlags.Managed, device, out adj, out mtrl);

    if ((mtrl != null) && (mtrl.Length > 0))
    {
        m_MeshMaterials = new Material[mtrl.Length];
        m_MeshTextures = new Texture[mtrl.Length];

        for (int i = 0; i < mtrl.Length; i++)
        {
            m_MeshMaterials[i] = mtrl[i].Material3D;

            if ((mtrl[i].TextureFilename != null) && (mtrl[i].TextureFilename != string.Empty))
            {
                m_MeshTextures[i] = TextureLoader.FromFile(device, directory + mtrl[i].TextureFilename);
            }
         }
    }
}
Allerings wird das Objekt nicht angezeigt :? Wie schaffe ich jetzt, dass das Objekt angezeigt wird, und wie schaffe ich das jetzt, mehrere Objekte anzeigen zu lassen? Die x-Dateien sollen im Array XFiles liegen und beim hinzufügen/entfernen dementsprechend der Szene hinzugefügt/entfernt werden.

turboPASCAL 11. Okt 2008 15:10

Re: [DirectX] Dynamisch X-Meshs rendern
 
Mal Ne dumme Frage, wo wird es denn hineingeladen ? Welche Variable ?

Code:
LoadMesh("MeinMesh.x"); // <---<<
Meiner bescheidene Ansicht nach fehlt 'ne Variable.


Code:
myMesh = LoadMesh("MeinMesh.x"); // <---<<

Apollonius 11. Okt 2008 15:13

Re: [DirectX] Dynamisch X-Meshs rendern
 
Er hat doch das Feld m_Mesh deklariert. Diese speichert das (?) Mesh.

turboPASCAL 11. Okt 2008 15:35

Re: [DirectX] Dynamisch X-Meshs rendern
 
Huch, habe ich wohl übersehen:

Code:
public void LoadMesh(string file)
:mrgreen: :spin2:

TurboMartin 13. Okt 2008 17:10

Re: [DirectX] Dynamisch X-Meshs rendern
 
Dezent *push*

Ich habs immer noch nicht hinbekommen, dass das Mesh gerendert wird.

TurboMartin 15. Okt 2008 16:57

Re: [DirectX] Dynamisch X-Meshs rendern
 
*hochpush*

TurboMartin 16. Okt 2008 18:00

Re: [DirectX] Dynamisch X-Meshs rendern
 
*push*
http://www.ben-newman.de/smilie/signs/209174.gif

TurboMartin 18. Okt 2008 10:03

Re: [DirectX] Dynamisch X-Meshs rendern
 
*push*

TurboMartin 19. Okt 2008 10:17

Re: [DirectX] Dynamisch X-Meshs rendern
 
Ich hab leider immernoch keine Lösung gefunden... :(

TurboMartin 20. Okt 2008 16:35

Re: [DirectX] Dynamisch X-Meshs rendern
 
Mein 6. Post in Folge :?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz