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

前      言

       以前是用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();
              }
执行结果如下:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值