MDX Mesh wird nicht korrekt dargestellt

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Bluespide.

    MDX Mesh wird nicht korrekt dargestellt

    Moin,

    ich weiß nicht warum, aber irgendwie wird das geladenen Mesh nicht richtig dargestellt. Es fehlen Wände bzw. man zieht welche, die im Hintergrund liegen. Jemand eine Idee? Liegt das an dem Model?

    device:

    Quellcode

    1. Device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, new PresentParameters() { Windowed = true, SwapEffect = SwapEffect.Discard });
    2. Device.RenderState.ZBufferEnable = true;
    3. Device.RenderState.FillMode = FillMode.Solid;
    4. Device.RenderState.Lighting = true;
    5. Device.RenderState.Ambient = Color.White;
    6. Device.Lights[0].Diffuse = Color.White;
    7. Device.Lights[0].Position = new Vector3(5, 10, 5);
    8. Device.Lights[0].Direction = new Vector3(-1, -10, -1);
    9. Device.Lights[0].Enabled = true;


    lade mesh:

    Quellcode

    1. private static void LoadMesh(string filename, ref Mesh mesh, ref Material[] meshmaterials, ref Texture[] meshtextures) {
    2. ExtendedMaterial[] materialarray;
    3. mesh = Mesh.FromFile(filename, MeshFlags.Managed, K.Sp.Device, out materialarray);
    4. if ((materialarray != null) && (materialarray.Length > 0)) {
    5. meshmaterials = new Material[materialarray.Length];
    6. meshtextures = new Texture[materialarray.Length];
    7. for (int i = 0; i < materialarray.Length; i++) {
    8. meshmaterials[i] = materialarray[i].Material3D;
    9. meshmaterials[i].Ambient = meshmaterials[i].Diffuse;
    10. if ((materialarray[i].TextureFilename != null) && (materialarray[i].TextureFilename != string.Empty)) {
    11. meshtextures[i] = TextureLoader.FromFile(K.Sp.Device, materialarray[i].TextureFilename);
    12. }
    13. }
    14. }


    darstellen:

    Quellcode

    1. Device.Clear(ClearFlags.Target, Color.Gray, 1, 0);
    2. Device.BeginScene();
    3. Device.Transform.World = Matrix.Identity;
    4. Device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4, 16f / 9f, 0.1f, 5000f);
    5. Device.Transform.View = Matrix.LookAtLH(CameraPosition, CameraPosition + LookAtPosition, new Vector3(0, 1, 0));
    6. VertexFormat = _mesh.Mesh.VertexFormat;
    7. for (int i = 0; i < _mesh.Materials.Length; i++) {
    8. Device.Material = _mesh.Materials[i];
    9. Device.SetTexture(0, _mesh.Textures[i]);
    10. _mesh.Mesh.DrawSubset(i);
    11. }
    Bilder
    • Unbenannt.png

      13,99 kB, 1.616×939, 108 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bluespide“ ()

    Hi @Bluespide:

    Ich stelle mal eine Vermutung an:

    Du zeichnest den Mesh von vorne nach hinten,
    deshalb wird der hintere (eigentlich unsichtbare) teil zuletzt gerendert
    und ist deshalb sichtbar.

    Möglicherweise ist die Lösung deines Problems, den SwapEffect auf Flip zu stellen.