一 首先需要安装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开发入门详解相关推荐

  1. 图解VC#版DirectX开发教程二 - 摄像机

    用VC#进行DirectX开发,程序结构大体都是一样的. 上一篇博文,VC#版DirectX开发入门详解 http://blog.csdn.net/bcbobo21cn/article/details ...

  2. 最强ADI SHARC系列DSP:ADSP-SC589的开发入门详解

    作者的话 ADI的SHARC系列DSP,现阶段最强的型号是SC589,那么我就以SC589为例,写一点资料,让新手能够比较便捷的熟悉开发环境,软硬件,顺利的进入开发. 文档解决的是入门的问题,所以不会 ...

  3. IVX全栈开发入门详解

    近年来,低代码之分愈刮愈烈,低代码平台也层出不穷.对于开发者来说,一个好的开发平台能够让开发者犹如神助,进行快速开发.在使用过众多的低代码开发平台中,大家都给我推荐IVX.我也体验了一段时间.这篇文章 ...

  4. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  5. 必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法

    必过SafetyNet!以MIUI开发版系统为例详解Android设备通过SafetyNet校验方法 作者 梓沐啊_(KylinDemons) 版权声明 Copyright © 2021 KylinD ...

  6. FFmpeg入门详解之75:FFmpeg转码器Java版之系统分析与设计

    1.引言 1.1编写目的 本系统旨在提供一套简单.通用的音视频转码系统,将目前集成的第三方音视频服务替换,打造FYXY专属品牌的音视频服务,为公司添砖加瓦,提高核心竞争力. 1.2项目背景 融媒体是新 ...

  7. FFmpeg入门详解之82:FFmpeg转码器Java版之ava编码

    创建数据库:db_webavtc 创建数据表:avcategory(素材类别) id int primary key, pid int , cname varchar(255), cmemo varc ...

  8. python开发技术详解pdf下载_python开发技术详解附源码-python开发技术详解电子书pdf下载高清去水印版-精品下载...

    Python开发技术详解适合Python爱好者.大中专院校的学生.社会培训班的学生以及用Python语言进行系统管理.GUI开发.Web开发.数据库编程.网络编程的人员使用. 内容提要 Python是 ...

  9. 《Android_3D游戏开发技术详解与典型案例》PDF版电子书下载

    点击下载: <Android_3D游戏开发技术详解与典型案例> 内容简介: <Android 3D游戏开发技术详解与典型案例(附盘)>,本书分为两篇共22章,第一篇以简单易懂的 ...

最新文章

  1. 多线程编程有什么用途_C++ 多线程编程 (一)
  2. 分布式系统中的一致性协议之两阶段提交协议(2PC)
  3. 创建租房网House脚本
  4. Xcode 8.0 doc 注释的问题
  5. Scikit-Learn 与 TensorFlow 机器学习实用指南学习笔记1 — 机器学习基础知识简介
  6. 十一、深入Java的判断语句
  7. 装饰者模式的应用场景
  8. ubuntu gedit出错:Failed to connect to the session manager
  9. 机器人 林州重机_林州重机募资11亿布局油气和机器人项目
  10. SpringMVC配置静态资源加载, 中文乱码处理,注解驱动
  11. 哪些服务器支持win8系统,Win8服务器版更名Windows Server 2012
  12. [Go实战]goFrame框架初次使用
  13. bat文件建文件夹时乱码及失败问题
  14. yeezy350灰橙_Yeezy 350V2 Grey Orange 侃爷椰子350 灰橙 特价
  15. React通过后台图片路径,打包下载图片
  16. 物联网应用技术竞赛 ——数据库添加新用户映射
  17. 小学计算机管理员总结,计算机管理教学个人总结范文
  18. ..\Watch\alarm.c(149): error: #268: declaration may not appear after executable statement in block
  19. 织梦后台html编辑器不显示,织梦后台文章内容编辑空白不显示文字解决办法
  20. Dubbo入门教程,谈谈为什么要用Dubbo?

热门文章

  1. 会话技术 —— Cookie 实现原理 || 在idea编辑器中设置代码的模板
  2. HTML5实战—canvas绘图之贝塞尔曲线
  3. Dwg图纸属性的读取
  4. 【嵌入式干货】hex、bin转换、以及hex合成工具(基于Python)
  5. 已知两个信号的协方差矩阵,如何生成这两个信号
  6. matlab中循环保存数据
  7. C++ string 类常用函数
  8. fitEllipse函数
  9. adaptiveThreshold函数
  10. 图像的灰度化以及二值图函数