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

原创 2007年06月26日 10:08:00
 
第二章 向量的运算(1)
1:向量相等
几何学上,有同样方向和长度的两个向量相等。数学上,我们说有同样维数和分量的向量相等。例如:如果ux = vx, uy = vy, 且 uz = vz.那么(ux, uy, uz) = (vx, vy, vz)。在代码中我们能够用“= =”判断两个向量相等。
2:向量模长
向量的大小是有向线段的长度。知道向量的分量,利用下面的公式就能计算出向量的大小。
‖u‖表示向量u的长度。例如:计算向量u = (1, 2, 3)和v = (1, 1)的大小。
根据公式(1),我们得到:
在DirectX中,向量的Length()方法可以得到向量模长,例如:
Vector3 vec =new Vector3(1,2,3);
MessageBox.Show("向量V(1,2,3)的模长为:/n"+vec.Length().ToString());
执行结果:
另外一个有用的方法是Vector.LengthSq(),求得的是向量模长的平方,在实际中,它的用途可能超过Length();如果在一个程序中前面需求模长,后面又要对模长平方运算,用此方法就省去了许多计算,我们知道,开平方运算对计算机来说是其实是个痛苦的事情;
3:向量单位化
向量单位化就是让向量的大小等于1,叫作单位向量。能利用向量大小以及各个分量把一个向量单位化:
比如,对于向量u = (1, 2, 3) 和 v = (1, 1)。单位化方法如下
首先,利用前面的求向量模长公式得到‖u‖=√14 和 ‖v‖=√2,因此:
以下代码是将向量单位化以后,看看向量的值及模长:
Vector3 vec =new Vector3(1,2,3);
                     vec.Normalize();
                     string disString="向量V(1,2,3)单位化以后为:/n";
                     disString+="V("+vec.X.ToString()+" ,"+vec.Y.ToString()+" ,"+vec.Z.ToString()+")/n";
                     disString+="单位化以后的模长为:"+vec.Length().ToString();
                     MessageBox.Show(disString,"向量的单位化");
程序执行结果如下:
4:向量相加
能够通过分别把两个向量的各个分量相加得到向量之和,注意在相加之前必须保证它们有相同的维数。
下面图中显示的是向量相加几何表示:
以下代码显示两个向量的相加,并把相加后的结果显示出来:
                     Vector3 vec1 =new Vector3(1,2,3);
                     Vector3 vec2 =new Vector3(3,4,5);
                     Vector3 vec3=Vector3.Add(vec1,vec2);
                     string disString="V(1,2,3)+V(3,4,5):/n";
       disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n";
       MessageBox.Show(disString,"向量的相加");
执行结果如下:
5:向量相减
和加法类似,通过分别把两个向量的各个分量相减得到向量之差。
图中显示的是几何学上的向量相减。
以下代码显示两个向量的相减,并把相减后的结果显示出来:
private void VectorSubtract()
              {
                     Vector3 vec1 =new Vector3(1,2,3);
                     Vector3 vec2 =new Vector3(3,4,5);
                     Vector3 vec3=Vector3.Subtract(vec1,vec2);
                     string disString="V(1,2,3)-V(3,4,5):/n";
                     disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n";
                     MessageBox.Show(disString,"向量的相减");            
              }
执行结果如下:
6:向量的数乘
用一个数与向量相乘,向量按比例变化。用负数去乘改变方向。
以下代码计算向量的数乘:
private void VectorScale()
              {
                     Vector3 vec1 =new Vector3(1,2,3);
                     Vector3 vec3=Vector3.Scale (vec1,10);
                     string disString="V(1,2,3)乘以10:/n";
                     disString+="V("+vec3.X.ToString()+" ,"+vec3.Y.ToString()+" ,"+vec3.Z.ToString()+")/n";
                     MessageBox.Show(disString,"向量的数乘");     
              }
执行结果是:
 

Visual C# 的DirectX开发系列1初识DirectX

Visual C# 的DirectX开发系列一初识DirectX 1.如何查看本机的DirectX的版本:  点“开始”-“运行”,在“运行”里输入“dxdiag”回车,弹出DirectX...
  • y13156556538
  • y13156556538
  • 2016-03-08 17:03:37
  • 1488

VC#版DirectX开发入门详解

一 首先需要安装DirectX SDK, 可在 http://download.microsoft.com/download/F/1/7/F178BCE4-FA19-428F-BB60-F3DEE11...
  • bcbobo21cn
  • bcbobo21cn
  • 2015-04-05 20:42:24
  • 2375

c#开发环境下用Directx载入3D模型

Direcx一般都是用VC++开发环境,而c#相关的资料比较少,最近做的一个项目中需要用到一个3D模型,而开发环境是visual c#,没办法,就四处搜集资料,查找相关的资料,然后找到了几篇相关的博文...
  • t46414704152abc
  • t46414704152abc
  • 2015-05-16 15:27:12
  • 6631

基于Visual C#的DirectX开发实例——绘制一个三角形

四、绘制一个三角形 通过Direct3D绘制的每个对象都是有三角形组成的,一个三角形由三个点组成,而每个点都定义成一个向量来指定点的X、Y和Z坐标。DirectX中有一种定义顶点的结构,那就是Cus...
  • y13156556538
  • y13156556538
  • 2016-03-08 16:53:22
  • 1904

基于Visual C#的DirectX开发实例——第一个DirectX程序

三、第一个DirectX程序1、新建项目新建一个Visual C#空项目,设置其项目名称为“第一个DirectX程序”,如下图所示:2、新建项在解决方案资源管理器中选择项目名称并点击右键,选择“添加—...
  • xwebsite
  • xwebsite
  • 2010-05-11 14:12:00
  • 3975

【Visual C++】游戏开发笔记二十六 DirectX 11各组件的介绍&第一个DirectX 11 Demo的创建

本系列文章由zhmxy555(毛星云)编写,转载请注明出处。http://blog.csdn.net/zhmxy555/article/details/7688515作者:毛星云    邮箱: hap...
  • zhmxy555
  • zhmxy555
  • 2012-06-25 04:11:11
  • 29124

基于C#的DirectX开发(基础篇)一

开发环境:Visual Studio 2008 / DirectX9 sdk1. 在vs2008下选择创建windows下的一个空项目。2. 为项目添加引用,引入Microsoft.Directx,M...
  • bdqian
  • bdqian
  • 2010-04-07 10:26:00
  • 644

DirectX SDK 各版本开发包下载地址合集

DirectX SDK 各版本开发包下载地址合集 PCHOME 下载 http://download.pchome.net/search-0--directx----------1-1-3...
  • lvwx369
  • lvwx369
  • 2013-06-20 14:42:55
  • 12683

一、VS2015update2环境下DirectX11编程说明(2016.5.5更新)

本文索引:一 关于龙书 二 在vs2015u2环境下编写DirectX11程序 三 关于MSDN帮助文档 四 官方示例项目 五 自己尝试编写一个小项目 1 创建一个win32项目 2 配置依赖库 3 ...
  • xueyedie1234
  • xueyedie1234
  • 2016-05-04 17:35:58
  • 14203

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

第六章 Mesh对象一、什么是Mesh?前面已经接触过Mesh类,在这里则对它进行详细介绍Mesh可以用来储存任何类型的图形数据,但主要用来封装复杂的模型。Mesh类同样也有一些用来提高渲染物体性能的...
  • kenkao
  • kenkao
  • 2010-10-14 11:01:00
  • 1555
收藏助手
不良信息举报
您举报文章:Managed DirectX +C# 开发(入门篇)(二)
举报原因:
原因补充:

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