VC#版DirectX开发入门详解
一 首先需要安裝DirectX SDK,
可在
http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE1130BFA/DXSDK_Feb10.exe
下載
也可在我的網盤下載:
http://pan.baidu.com/s/1pJmMLHh
?
安裝之后在下圖目錄出現下圖內容,這是用于C#的DirectX支持DLL;
?
二 首先拷貝過來一個例子代碼調試一下;
出現上圖錯誤,按下圖啟動工作站服務,
?
?
再調試,可以運行了,但是出現下圖錯誤;
??? 按網上一些說法,改了一些地方,包括.net版本改為2.0,還是錯誤,提示只有一句:不是有效的Win32應用程序;既然不好搞,還是不用拷來的例子,自己寫吧;
?
新建一個空項目 - 添加新項 窗體;
此時窗體只有一個構造函數,添加Main()函數讓程序能運行,如下;
static void Main()
??????? {
??????????? Form1 basicForm = new Form1(); //創建窗體對象
??????????? basicForm.Show(); //
??????? }
?
然后添加引用,添加命名空間,如下;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
先運行一下,結果出現 VS沒反應,出現提示對話框:VS正在等待某個操作.... 這個錯誤,大概不少人碰到過;
工具-選項-IntelliSense,把 IntelliSense成員選擇 前面的勾去掉;
??? 再運行,好了;下面添加DirectX代碼;
添加窗體級變量:
Device device = null;//定義繪圖設備
?
添加初始化D3D函數:
public bool InitializeDirect3D()
??????? {
??????????? try
??????????? {
??????????????? PresentParameters presentParams = new PresentParameters();
??????????????? presentParams.Windowed = true; //指定以Windows窗體形式顯示
??????????????? presentParams.SwapEffect = SwapEffect.Discard; //當前屏幕繪制后它將自動從內存中刪除
??????????????? device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); //實例化device對象
??????????????? return true;
??????????? }
??????????? catch (DirectXException e)
??????????? {
??????????????? MessageBox.Show(e.ToString(), "Error"); //處理異常
??????????????? return false;
??????????? }
??????? }
?
添加渲染函數,此時并無渲染內容;
public void Render()
??????? {
??????????? if (device == null)?? //如果device為空則不渲染
??????????? {
??????????????? return;
??????????? }
??????????? device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 1.0f, 0);? //清除windows界面為深藍色
??????????? device.BeginScene();
??????????? //在此添加渲染圖形代碼
??????????? device.VertexFormat = CustomVertex.TransformedColored.Format;
??????????? device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices);
??????????? device.EndScene();
??????????? device.Present();
??????? }
?
main()函數改為如下:
static void Main()
??????? {
??????????? Form1 basicForm = new Form1(); //創建窗體對象
??????????? if (basicForm.InitializeDirect3D() == false) //檢查Direct3D是否啟動
??????????? {
??????????????? MessageBox.Show("無法啟動Direct3D!", "錯誤!");
??????????????? return;
??????????? }
??????????? basicForm.Show(); //如果一切都初始化成功,則顯示窗體
??????????? while (basicForm.Created) //設置一個循環用于實時更新渲染狀態
??????????? {
??????????????? basicForm.Render(); //保持device渲染,直到程序結束
??????????????? Application.DoEvents(); //處理鍵盤鼠標等輸入事件
??????????? }
??????? }
然后再運行,出現下圖錯誤;
?
把.net版本改為2.0;Run,好了,第一個DirectX窗口出現;不過并無內容;
?
下面來畫一個基本的三角形;
在BeginScene和EndScene之間加入如下代碼;
CustomVertex.TransformedColored[] vertices = new CustomVertex.TransformedColored[3];//定義頂點
??????????? vertices[0].Position = new Vector4(400f, 200f, 0f, 1f);
??????????? vertices[0].Color = Color.Red.ToArgb();
??????????? vertices[1].Position = new Vector4(this.Width / 2, 100f, 0f, 1f);
??????????? vertices[1].Color = Color.Green.ToArgb();
??????????? vertices[2].Position = new Vector4(this.Width - 150f, 200f, 0f, 1f);
??????????? vertices[2].Color = Color.Yellow.ToArgb();
??????????? device.VertexFormat = CustomVertex.TransformedColored.Format;
??????????? device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices);
?
運行程序,結果如下,因為設置的三角形坐標有問題,三角形超出了邊界;
?
Vector4結構的前三個參數是指浮點型的x、y、z坐標;
修改坐標為如下,
vertices[0].Position = new Vector4(100f, 200f, 0f, 1f);
??????????? vertices[0].Color = Color.Red.ToArgb();
??????????? vertices[1].Position = new Vector4(this.Width / 2, 50f, 0f, 1f);
??????????? vertices[1].Color = Color.Green.ToArgb();
??????????? vertices[2].Position = new Vector4(this.Width - 150f, 100f, 0f, 1f);
??????????? vertices[2].Color = Color.Yellow.ToArgb();
再RUN,這下好了;下面就可以開始用DirectX做更多的事。
?
項目源碼下載:
http://pan.baidu.com/s/1c050hCO
?
?
總結
以上是生活随笔為你收集整理的VC#版DirectX开发入门详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DirectX9 SDK 下载、安装、V
- 下一篇: 图解VC#版DirectX开发教程二 -