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();
              }
执行结果如下:
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

利用DirectX写的二个常用函数

1:求两个平面相交所形成的直线: bool GetIntersectionLine (D3DXPLANE& plane01,D3DXPLANE& plane02,CRayLine...

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

前      言       以前是用VC 作计算机图形学的,大约在一年前,公司接到一个用C#+DirecX的项目,从那时起便开始学习Mangaged DirectX ,现将在开发过程中的一...
  • kenkao
  • kenkao
  • 2010-10-14 10:56
  • 1194

C# Direct3D9开发实例二:树木成林

一、     所用基础知识:(1)关于创建设备 Device类是DirectX里的所有绘图操作所必须的。可以把这个类假想为真实的图形卡。场景里所有其他图形对象都依赖于device。客户端可以有一个到几...

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

第二章 向量的运算(1)1:向量相等几何学上,有同样方向和长度的两个向量相等。数学上,我们说有同样维数和分量的向量相等。例如:如果ux = vx, uy = vy, 且 uz = vz.那么(ux, ...

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

第二章 向量的运算(2)7:向量的最大与最小值最大值是从两个向量X,Y,Z值中分别取出最大值组成一个新向量;最小值是从两个向量X,Y,Z值中分别取出最小值组成一个新向量;看以下代码:         ...

DirectX11入门篇

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

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

摘要:本文是在开发Mono手机平板项目时,对安装Mono for Android工具,调用WCF服务,等一些要注意的问题进行汇总;其中包括WCF异步调用,SOAP代理类调用等。 一:前提: 1> ...
  • besley
  • besley
  • 2012-09-10 11:15
  • 3919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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