Manged Direct3d基本框架+Mesh的使用(一)
代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace MyManagedDirectX


{
public partial class MainForm : Form

{

Members#region Members
Device device = null;
Mesh mesh = null;
#endregion


Form Members and Event Hanlders#region Form Members and Event Hanlders
public MainForm()

{
InitializeComponent();
this.Width = 600;
this.Height = 600;
}
private void OnPaint(object sender, PaintEventArgs e)

{
InitializeCamera();
this.Render();
}
private void OnResize(object sender, EventArgs e)

{
// this.Invalidate();
}
#endregion


DirectX#region DirectX
public void Initialize()

{
InitializeDevice();
InitializeData();
AddColor();
InitializeCamera();
}
public void InitializeDevice()

{
Caps caps = Manager.GetDeviceCaps(Manager.Adapters.Default.Adapter,DeviceType.Hardware);

CreateFlags flags;

if (caps.DeviceCaps.SupportsHardwareTransformAndLight)
flags = CreateFlags.HardwareVertexProcessing;
else
flags = CreateFlags.SoftwareVertexProcessing;

PresentParameters parameters = new PresentParameters();
parameters.BackBufferFormat = Format.Unknown; //不手動管理buffer
parameters.Windowed = true;
parameters.SwapEffect = SwapEffect.Discard; // 屏幕與buffer的交換方式
parameters.EnableAutoDepthStencil = true;
parameters.AutoDepthStencilFormat = DepthFormat.D16;
parameters.PresentationInterval = PresentInterval.Immediate;

device = new Device(Manager.Adapters.Default.Adapter,
DeviceType.Hardware,
this,
flags,
parameters);
device.DeviceReset += new EventHandler(this.OnDeviceReset);
OnDeviceReset(device, null);
}
public void OnDeviceReset(object sender, EventArgs args)

{
Device d = sender as Device;

d.RenderState.CullMode = Cull.None;

d.RenderState.Lighting = false;
d.RenderState.FillMode = FillMode.WireFrame;
}
public void InitializeData()

{
//加載mesh
mesh = Mesh.Sphere(device, 1.0f, 20, 20);
}
public void AddColor()

{
//從mesh中取出信息,填入顏色信息
Mesh tempMesh = mesh.Clone(mesh.Options.Value,CustomVertex.PositionColored.Format, device);
CustomVertex.PositionColored[] vertexes = (CustomVertex.PositionColored[])tempMesh.VertexBuffer.Lock(0, typeof(CustomVertex.PositionColored), LockFlags.None, mesh.NumberVertices);
for (int i = 0; i < vertexes.Length; i++)
vertexes[i].Color = Color.Blue.ToArgb();
tempMesh.VertexBuffer.Unlock();
mesh.Dispose();
mesh = tempMesh;
}
public void InitializeCamera()

{
//s設置怎么顯示
device.Transform.World = Matrix.Identity;
device.Transform.View = Matrix.LookAtLH(new Vector3(0.0f, 3.0f, 3.0f),
new Vector3(0.0f, 0.0f, 0.0f),
new Vector3(0.0f,1.0f,0.0f));
device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4f, this.Width / this.Height, 1.0f, 20.0f);
}
public void Render()

{
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);

device.BeginScene();
mesh.DrawSubset(0);
device.EndScene();
device.Present();
}
#endregion

public static void Main()

{
using (MainForm form = new MainForm())

{
form.Show();
form.Initialize();
Application.Run(form);
}
}
}
}

































































































































































posted on 2007-11-09 17:34 夢在天涯 閱讀(1559) 評論(0) 編輯 收藏 引用 所屬分類: DirectX