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

Visual C# 的DirectX开发系列一初识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)即可,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值