broetchen
Erfahrenes Mitglied
hi!
Ich arbeite mich gerade in MDX ein und wollte mittels IndexBuffer nen Würfel erstellen.
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
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;
}
}
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