Managed DirectX - komischer Würfel

broetchen

Erfahrenes Mitglied
hi!

Ich arbeite mich gerade in MDX ein und wollte mittels IndexBuffer nen Würfel erstellen.
Code:
public class Form2 : System.Windows.Forms.Form
{
  private Device device;
  private VertexBuffer vBuffer;
  private IndexBuffer iBuffer;
  CustomVertex.PositionOnly[] verts;
  int[] indices;

  public Form2()
  {
    InitializeComponent();

    PresentParameters presentParams = new PresentParameters();
    presentParams.SwapEffect = SwapEffect.Discard;
    presentParams.Windowed = true;

    device = new Device(0,DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertexProcessing, presentParams);

    CreateCube();
  }

  private void CreateCube()
  {
    vBuffer = new VertexBuffer(typeof(CustomVertex.PositionOnly), 8, device, Usage.Dynamic, CustomVertex.PositionOnly.Format, Pool.Default);
    iBuffer = new IndexBuffer(typeof(int), 36, device, Usage.Dynamic, Pool.Default);

    //creating vertices
    verts = new CustomVertex.PositionOnly[8];
    //vorne
    verts[0] = new CustomVertex.PositionOnly(25,25,25);
    verts[1] = new CustomVertex.PositionOnly(75,25,25);
    verts[2] = new CustomVertex.PositionOnly(75,75,25);
    verts[3] = new CustomVertex.PositionOnly(25,75,25);
    //hinten
    verts[4] = new CustomVertex.PositionOnly(25,25,75);
    verts[5] = new CustomVertex.PositionOnly(75,25,75);
    verts[6] = new CustomVertex.PositionOnly(75,75,75);
    verts[7] = new CustomVertex.PositionOnly(25,75,75);
    //setting data
    vBuffer.SetData(verts,0,LockFlags.None);

    //setting indices
    indices = new int[36]
    { 
    //vorne
    0,1,3,
    1,2,3,
    //rechts
    1,5,2,
    5,6,2,
    //hinten
    5,4,6,
    4,7,6,
    //links
    4,6,7,
    6,3,7,
    //oben
    4,5,0,
    5,1,0,
    //unten
    3,2,7,
    2,6,7
    };
    iBuffer.SetData(indices,0,LockFlags.None);

   device.Indices = iBuffer;
  }

  public void Render()
  {
    device.Clear(ClearFlags.Target, Color.White, 1.0f, 0);
    device.BeginScene();
    SetupCamera();
    device.SetStreamSource(0,vBuffer,0);
    device.VertexFormat = CustomVertex.PositionOnly.Format;
    device.DrawIndexedPrimitives(PrimitiveType.LineList, 0, 0, verts.Length, 0, indices.Length/3);

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

  private void SetupCamera()
  {
    device.Transform.View = Matrix.LookAtLH(new Vector3(), new Vector3(100,100,100), new Vector3(0,1,0));

    device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI/2, (float)Width/Height, 1.0f, 150.0f);

    device.RenderState.ZBufferEnable = false;
    device.RenderState.CullMode = Cull.None;
  }
}
Ich hab die Standard-Form-Funktionen hier mal weggelassen.

Das Problem bei der ganzen Sache ist, dass das Ergebnis etwas komisch aussieht (ich häng mal nen screenshot an).

Ich find den Fehler einfach net. Kann mir jemand bitte helfen?!

mfg broetchen
 

Anhänge

  • WeirdCube.JPG
    WeirdCube.JPG
    9,4 KB · Aufrufe: 58

Neue Beiträge

Zurück