Managed DirectX +C# 开发(入门篇)(一)

原创 2007年06月26日 10:06:00

       

以前是用VC 作计算机图形学的,大约在一年前,公司接到一个用C#+DirecX的项目,从那时起便开始学习Mangaged DirectX ,现将在开发过程中的一点总结发表出来,和同行们共同参考,共同学习,共同进步,前面是一些基础内容,算是入门篇吧,现在正将开发过程中所用到的一些算法整理中,算是中级篇吧。
1:在整理过程中,有些内容为从网上找的资料,部分为翻译国外文章,正所谓“天下文章一大抄,就看会抄不会抄。”,如果侵犯了你的个人权益,可同我联系;
2:以前的开发环境为VS.NET2003 1.1+DirectX9.0。现在开发环境为VS2005,有些程序开发环境记不清了。但应不受影响。
3:有些内容为GDI+所做,所有的范例都保存有源代码,但受限于网络情况,有些没有传上去,有需要的可以联系;
4:由于才学疏浅,个人水平有限,希望大虾们批评指正;
5:联系方式:mail:tongabcd@yeah.net QQ:50759188 (加我时注明Managed DirectX)
第一章 向量
在这一部分中将介绍一些基本的数学知识,主要讨论的内容是向量、矩阵和变换,另外还有一些关于空间点、线、面、体的相关知识,如果你已经掌握了《线性代数》和《空间解析几何》这两门课程,读起来会很轻松,如果以前没接触过它们,也没有关系,只不过会感到有点吃力;在这里会结合D3DX类中相关的数学模型和有关函数结合程序介绍它们;
在本部分中主要介绍四个方面的内容:
(1)、向量的概念及三维概念;
(2)、矩阵的概念及在DirectX10中的应用;
(3)、如何在DirectX10生成线和面;
(4)、三维数学运算公式及相关类。比如向量的点积、向量的叉积等;
1:向量
在三维欧氏空间直角坐标系中,用有向线段表示向量,我们知道,空间中两点决定一条直线段,如果把这两点的方向也包解在内,就成为有向线段,就是向量,可以看出,向量的两个属性是它的长度和顶点所指的方向。这样,就可以使用向量来模拟既有大小又有方向的物理模型;比如:在三维游戏中经常要出现粒子系统,可以使用向量来模拟粒子的速度和加速度;再比如:直线灯光不仅有灯光的位置,还有光线的方向,摄像机也有位置及视角。因此,向量为在三维空间中表示方向提供了方便;下图显示的都是空间向量;
(图一)
向量有大小有方向,但是和位置无关,长度和方向都相同但起始点位置不同的两个向量是相等的。现在看上面的图中,向量u和v是相等的。
2:坐标系
三维空间中,当固定了X轴方向和Y轴方向之后,Z轴方向可以朝里,也可以朝外,称为左手坐标系和右手坐标系;
3:向量的表示
因为向量与位置无关,因此可以通过平移使向量的起点和坐标系的原点重合。因此,一个向量的标准位置可以只用一个点来描述就可以了,比如说向量v(1,2,3),就是指起点为(0,0,0),终点为v(1,2,3)的有向线段;
通常,使用一个字母来表示一个向量,大小写无关,另外,有时,只需要使用X,Y坐标而不使用Z坐标,比如对一个二维游戏来说,Z值有时是多余的,但有时对一个点来说,除了用X、Y、Z来表示它的位置之外,还需要一个数值来表示它的颜色、变换等信息。因此,在DirectX中,有二维、三维、四维向量。如2、3和4维向量分别是:u = (ux, uy), N = (Nx, Ny, Nz), c = (cx, cy, cz, cw)。
4:单位向量
只有1个单位长度的向量叫做单位向量。如果它们的方向恰好又在坐标轴上,称为单位基向量;它们被叫做i, j和k向量,分别沿着坐标系的x轴,y轴和z轴,并且有1的单位长:i = (1, 0, 0), j = (0, 1, 0), and k = (0, 0, 1)。
在DirectX中,定义一个二维、三维、四维向量的类在Microsoft.DirectX命名空间中,分别为Vector2、Vector3、Vector4
5:示例
下面代码定义一个二维向量,并绘出一条直线,在这里只写出相关代码,完整代码见源文件;
private void Render()
              {
                     Vector2[] vecs = new Vector2[2];
                     vecs[0]=new Vector2(300,300);
                     device.Clear(ClearFlags.Target, System.Drawing.Color.White , 1.0f, 0);
                     device.BeginScene();
                     using (Line l = new Line(device))
                     {
                            l.Draw(vecs, Color.Red );
                     }
                     device.EndScene();
                     device.Present();
              }
执行结果如下:

DirectX11入门篇

开始学些DirectX11,跟着流水线走。 IA阶段IA阶段主要读取初始数据从用户填充的buffer里面并且组装成图元用于下一个管线阶段。IA主要用到三个函数:void IASetIndexBuff...
  • hubing_
  • hubing_
  • 2015年07月22日 12:54
  • 405

C# + Managed DirectX 实现水果机滚动

  • 2010年11月08日 10:05
  • 3.73MB
  • 下载

C#(Mono)开发手机及平板应用入门篇(含WCF服务实现)

摘要:本文是在开发Mono手机平板项目时,对安装Mono for Android工具,调用WCF服务,等一些要注意的问题进行汇总;其中包括WCF异步调用,SOAP代理类调用等。 一:前提: 1> ...
  • besley
  • besley
  • 2012年09月10日 11:15
  • 4031

.NET 入门篇基础PPT C#

  • 2011年03月29日 16:52
  • 12.94MB
  • 下载

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117...

C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁

C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ? 标签: c#objectuibyte通讯.net 2010-05-19 08:43 55211人阅读 评...

.NET入门篇 C#代码注释

.NET中有三种注释: 1.单行

C# 串口操作系列(2) -- 入门篇,为什么我的串口程序在关闭串口时候会死锁 ?

第一篇文章我相信很多人不看都能做的出来,但是,用过微软SerialPort类的人,都遇到过这个尴尬,关闭串口的时候会让软件死锁。天哪,我可不是武断,算了。不要太绝对了。99.9%的人吧,都遇到过这个问...

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 分类: 通讯类库设计2010-05-17 01:10 60772人阅读 评论(232) 收藏 举报 c#obj...

C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。 ——兔子党逍遥原创,转来分享学习

我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础。 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Managed DirectX +C# 开发(入门篇)(一)
举报原因:
原因补充:

(最多只允许输入30个字)