Direct3D学习笔记(1) 初始化Device
by rockin
我觉得这个步骤应该算是HelloWorld之前的步骤. 之前用过OpenGL, 觉得相比起OpenGL的初始化来说, Direct3D的初始化简单容易很多, 没有OpenGL的那些令初学者摸不着头脑的DC, RC等等这些比较基础的东西. 所以第一个程序就觉得简单的很:
1. 打开Visual Studio 2005, 新建一个winform project
2. 添加如下两个引用
Microsoft.DirectX
Microsoft.DirectX.Direct3D
3. 写一个InitGraphics()函数来初始化Device. 一个Device对象就是用来画图的吧我想, 我觉得简单的理解就是只要有了device, 就可以胡乱的画了. 初始化Device用到的参数也不复杂, 现在还不是完全的理解, 不过没关系, 只要顺利的有了device, 就可以往下学习了.
4. 重写OnPaint函数, 添加一个我们用来画图的函数 Render(). 我想到这里, 一个最简单的Framework就搭建好了, 想画什么东西就直接在Render()函数里面写代码就成了, Oh Yeah!
5. 练习一下清屏的函数, _device.Clear(...), 相当与glClearColor(..)
就这样, 第一个练习就顺利完成了, 在这个练习中, 我们得到了device, 以后就用它在这个窗口上画东西了! 代码就在下面.
1
public
partial
class
FrmInitDirect3D : Form
2
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
3
Device _device;
4![](/Images/OutliningIndicators/InBlock.gif)
5
public FrmInitDirect3D()
6![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
7
InitializeComponent();
8
this.Text = "初始化Direct3D Device";
9
}
10![](/Images/OutliningIndicators/InBlock.gif)
11
public bool InitGraphics()
12![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
13
try
14![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
15
PresentParameters presentParams = new PresentParameters();
16
presentParams.Windowed = true;
17
presentParams.SwapEffect = SwapEffect.Discard;
18
_device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams);
19
return true;
20
}
21
catch (DirectXException)
22![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
23
return false;
24
}
25
}
26![](/Images/OutliningIndicators/InBlock.gif)
27
protected override void OnPaint(PaintEventArgs e)
28![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
29
Render();
30
}
31![](/Images/OutliningIndicators/InBlock.gif)
32
private void Render()
33![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
34![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (_device == null)
{
35
return;
36
}
37![](/Images/OutliningIndicators/InBlock.gif)
38
_device.Clear(ClearFlags.Target, Color.Red, 1.0F, 0);
39
_device.BeginScene();
40![](/Images/OutliningIndicators/InBlock.gif)
41
_device.EndScene();
42
_device.Present();
43
}
44![](/Images/OutliningIndicators/InBlock.gif)
45
[STAThread]
46
static void Main()
47![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
48
Application.EnableVisualStyles();
49
Application.SetCompatibleTextRenderingDefault(false);
50![](/Images/OutliningIndicators/InBlock.gif)
51
FrmInitDirect3D frmInit3D = new FrmInitDirect3D();
52![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (frmInit3D.InitGraphics())
{
53
Application.Run(frmInit3D);
54
}
55
}
56
}
57