码迷,mamicode.com
首页 > Windows程序 > 详细

Visual C# 的DirectX开发系列一初识DirectX

时间:2015-01-22 11:09:38      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:directx

1.如何查看本机的DirectX的版本:

 点“开始”-“运行”,在“运行”里输入“dxdiag”回车,弹出DirectX 诊断工具窗口,就在首页中,有很多系统信息,最下面一条就是DirectX版本。如图:

技术分享

2.添加DirectX类库的引用:

新建WinForm窗体应用程序,然后添加三个Reference(引用),分别是:Microsoft.DirectX、Microsoft.DirectX.Direct3D 和Microsoft.DirectX.Direct3DX,如图:

技术分享技术分享

3.第一个DirectX程序:

首先介绍一下Device类,Device类用于完成DirectX 里所有绘图操作,我们可以把这个类假想为图形卡,场景里所有其他图形对象都依赖于Device,计算机里可以有多个Device
对象。所以在全局变量中定义一个绘图设备,如下代码:

Device device = null;//定义绘图设备

其次先定义一个初始化函数:InitializeDirect3D(),它将告诉绘图设备如何去渲染到屏幕上以及一些异常的处理,如下代码:

 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;
            }
        }

接着我们要定义渲染函数Render(),代码如下:

   public void Render()
        {
            if (device == null) //如果device为空则不渲染
            {
                return;
            }
            device.Clear(ClearFlags.Target, Color.Red, 1.0f, 0); //清除windows界面为红色
            device.BeginScene();
            //在此添加渲染图形代码
            device.EndScene();
            device.Present();
        }


最后定义程序入口即可,代码如下:

 static void Main()
        {
            Form1 frm1 = new Form1(); //创建窗体对象
            if (frm1.InitializeDirect3D() == false) //检查Direct3D是否启动
            {
                MessageBox.Show("无法启动Direct3D!", "错误!");
                return;
            }
            frm1.Show(); //如果一切都初始化成功,则显示窗体
            while (frm1.Created) //设置一个循环用于实时更新渲染状态
            {
                frm1.Render(); //保持device渲染,直到程序结束
                Application.DoEvents(); //处理键盘鼠标等输入事件
            }
        }

PS:完成后我运行时候报错了,提示如图:

技术分享

原来是因为在.NET 4.0 下使用 Dirext3D 托管库,出现“混合模式程序集是针对“v1.1.4322”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。”异常信息,查看程序集Microsoft.DirectX.dll、Microsoft.DirectX.Direct3D.dll、Microsoft.DirectX.Direct3DX,发现其.NET 运行时版本时v1.1.4322,也就是说D3D托管库是在 .NET v1.1 版本下编译生成的。 在.NET4.0以前,由于程序运行环境本质还是.NET2.0,并且.NET2.0兼容.NET1.0和1.1,但在升级到.NET4.0时,.NET的内核作了重大调整,以前在.Net2.0或.net3.5中生成的程序集,如果要在.net4.0下运行,需要在配置文件中指定此应用程序支持的公共语言运行时版本和启用 .NET Framework 2.0 运行时激活策略,这时 修改App.config的内容即可,代码如下:

<?xml version="1.0"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>


还可能出现一个错误是这样的,如图:

技术分享

至于这个问题嘛,错误提示已经很清楚了,大家在配置管理器中新建为32位应用程序(即x86)即可,


运行后效果如图:

技术分享


本文源码下载地址:http://download.csdn.net/detail/yangyisen0713/8385527

Visual C# 的DirectX开发系列一初识DirectX

标签:directx

原文地址:http://blog.csdn.net/lisenyang/article/details/43015053

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!