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)即可,

运行后效果如图:

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

时间: 2024-10-01 04:52:57

Visual C# 的DirectX开发系列一初识DirectX的相关文章

Visual C# 的DirectX开发系列二了解摄像机

这里借助部分网上的文字和图片说明,让大家更清楚的了解DirectX中的摄像机.(部分内容源于肖泽云老师书中内容,最终目的是让大家更清楚了解C#中的DirectX开发) 在使用摄像机前先来了解三个概念:世界空间(world space).摄像机空间(cameraspace)和模型空间(model space).世界空间(world space)可以认为是客观世界空间,所有对象都位于这个世界空间中.摄像机空间(camera space)用于展示显示区域,类似于人的眼睛.模型空间(model spac

SharePoint 2013 图文开发系列之Visual Studio 创建母版页

原文:SharePoint 2013 图文开发系列之Visual Studio 创建母版页 一直以来,对于SharePoint母版页的创建,都是使用SharePoint Designer来创建和修改的,而后接触了SharePoint 2013,发现可以使用Html文件,通过设计管理器导入,然后生成Master页面使用,但是效果不是很好. 其实,SharePoint还可以通过代码方式创建和部署母版页,创建的过程比较简单,篇幅很短,也不需要很详细的解说,相信了解开发的人,很容易就能搞定.之前浏览博客

【Windows10&nbsp;IoT开发系列】配置篇

原文:[Windows10 IoT开发系列]配置篇 Windows10 For IoT是Windows 10家族的一个新星,其针对不同平台拥有不同的版本.而其最重要的一个版本是运行在Raspberry Pi.MinnowBoard和Galileo平台上的核心版.本文重点针对Raspberry Pi平台的Windwos10 IoT配置做介绍. Windows 10 IoT Editions ​一:设置你的电脑. 注:​开发Windows10 IoT的电脑需要Visual Studio 2015.

【Windows10&nbsp;IoT开发系列】PowerShell的相关配置

原文:[Windows10 IoT开发系列]PowerShell的相关配置 可使用 Windows PowerShell 远程配置和管理任何 Windows 10 IoT 核心版设备.PowerShell 是基于任务的命令行 Shell 和脚本语言,专为进行系统管理而设计. 1.​启动 PowerShell (PS) 会话 注:若要使用装有Windows10 IoT Core设备启动PS会话,首先需要在主机电脑与设备之间创建信任关系. ​启动 Windows IoT 核心版设备后,与该设备相连的

【Windows10&nbsp;IoT开发系列】API&nbsp;移植工具

原文:[Windows10 IoT开发系列]API 移植工具 Windows 10 IoT Core 中是否提供你的当前 Win32 应用程序或库所依赖的 API? 如果不提供,是否存在可使用的等效 API? 此工具可以为你回答这些问题,并协助你将你的当前 Win32 应用程序和库迁移到 Windows IoT Core. Windows 10 IoT 核心版 API 移植工具可在 ms-iot/iot-utilities github 存储库中找到.下载存储库 zip 并将 IoTAPIPor

【Windows10&nbsp;IoT开发系列】“Hello,World!”指导

原文:[Windows10 IoT开发系列]"Hello,World!"指导 本文主要是介绍使用C#来开发一个可以运行在Raspberry Pi2上的一个基本项目. ​1.在启动Visual Studio 2015后,选择"文件"→"新建项目". ​在打开的"新建项目"对话框中,选择"通用". ​选择第一个项目"空白应用(通用Windows)" 新建项目 ​注:如果这是你创建的第一个项

高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输入时显示一个提示字符串.由于Background对ComboBox无效,所以直接通过Background来实现是不行了.需要重新写ComboBox的模板,也就是Template,自定义一个模板来实现这个结果.又看了一下QQ的下拉框,这玩意不自定义也难以实现,所以就干脆自定义了. 先上代码,先是Com

微信公众号开发系列教程一(调试环境部署续:vs远程调试)

原文:微信公众号开发系列教程一(调试环境部署续:vs远程调试) 目录 C#微信公众号开发系列教程一(调试环境部署) C#微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) 前几天决定写个微信公众平台开发系列,在发布第一篇博文后,收到了很多园友的反馈和建议,在这里感谢大家的支持,我会坚持写完这个系列,希望能帮助更多的小伙伴.特别要感谢下@ZIP,是他的一个提醒才有了这篇博文.也希望更多的小伙伴能把你的想法反馈给我. 上一篇中主要介绍的是使用花生壳

高仿QQ即时聊天软件开发系列之二登录窗口界面

继上一篇高仿QQ即时聊天软件开发系列之一开端之后,开始做登录窗口 废话不多说,先看效果,只有界面 可能还有一些细节地方没有做,例如那个LOGO嘛,不要在意这些细节 GIF虽短,可是这做起来真难,好吧因为我没玩过WPF所以难,因为感觉做出来之后也就那样 整体布局 整体是上下分,下面是左中右分 1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="27"><!--用于放窗口右上角关闭.最