|
大家帮帮忙
我想用DIRECT3D+C#做一个有颜色的静止三角形。但是调试只出现个蓝屏,我找不到原因,希望大家能帮忙。
form1.cs的代码
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 Triangle_VertexBuffer_
{
public partial class Form1 : Form
{
VertexBuffer vertexBuffer = null;
#region 数组变量
CustomVertex.TransformedColored[] verts;
#endregion
public Form1()
{
InitializeComponent();
}
bool pause = false;
private Device device = null;
private void Form1_Resize(object sender, EventArgs e)
{
pause = ((this.WindowState == FormWindowState.Minimized) || !this.Visible);
}
public void OnCreateDevice(object sender, EventArgs e)
{
Device dev = (Device)sender;
vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedColored), 3, dev, 0, CustomVertex.TransformedColored.Format, Pool.Default);
vertexBuffer.Created += new System.EventHandler(this.OnCreateVertexBuffer);
this.OnCreateVertexBuffer(vertexBuffer,null);
}
public void OnCreateVertexBuffer(object sender, EventArgs e)
{
verts = (CustomVertex.TransformedColored[])vertexBuffer.Lock(0,0);
verts[0].X = 150;
verts[0].Y = 50;
verts[0].Z = 0.5f;
verts[0].Rhw = 1;
verts[0].Color = System.Drawing.Color.Aqua.ToArgb();
verts[1].X = 250;
verts[1].Y = 250;
verts[1].Z = 0.5f;
verts[1].Rhw = 1;
verts[1].Color = System.Drawing.Color.Brown.ToArgb();
verts[2].X = 50;
verts[2].Y = 250;
verts[2].Z = 0.5f;
verts[2].Rhw = 1;
verts[2].Color = System.Drawing.Color.LightPink.ToArgb();
vertexBuffer.Unlock();
}
public void OnResetDevice(object sender, EventArgs e)
{
}
public bool InitializeGraphics()
{
try
{
PresentParameters presentParams = new PresentParameters();
presentParams.Windowed = true;
presentParams.SwapEffect = SwapEffect.Discard;
presentParams.EnableAutoDepthStencil = true;
presentParams.AutoDepthStencilFormat = DepthFormat.D16;
device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
device.DeviceReset += new System.EventHandler(this.OnResetDevice);
this.OnCreateDevice(device, null);
this.OnResetDevice(device, null);
}
catch (DirectXException)
{
return false;
}
return true;
}
public void Render()
{
if (device == null)
{
return;
}
if (pause)
{
return;
}
device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);
device.BeginScene();
device.SetStreamSource(0,vertexBuffer,0);
device.VertexFormat = CustomVertex.TransformedColored.Format;
device.DrawUserPrimitives(PrimitiveType.TriangleList,0,1);
device.EndScene();
device.Present();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
this.Render();
}
}
}
******************************************************************************
form1.cs的代码
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Triangle_VertexBuffer_
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
using (Form1 frm = new Form1())
{
if (!frm.InitializeGraphics())
{
MessageBox.Show("不能初始化Direct 3D,退出!");
return;
}
frm.Show();
while (frm.Created)
{
frm.Render();
Application.DoEvents();
}
}
}
}
}
**************************************************************
program.cs的代码
引用了
Microsoft.DirectX 和
Microsoft.DirectX.Direct3D
[em7] [em7] [em7] [em7] |
|