DirectX10一向量代数(一)

一.向量(vector)

        向量(vector)是一种同时具有方向和大小的物理量,而在DirectX10中,我们主要把精力放在D3DX向量上,D3DXVECTOR3类主要用于在代码中存储相对于某个坐标系的点和向量的坐标,这其中有很多非常有用的向量处理函数:

    

   FLOAT   D3DXVec3Length(  //return || v ||
   CONST D3DXVECTOR3 *pV);
   FLOAT   D3DXVec3Length3q(  //return || v || * || v ||
   CONST D3DXVECTOR3 *pV);
   FLOAT   D3DXVec3Dot(  //return v1 . v2
   CONST D3DXVECTOR3 *pV1,
   CONST D3DXVECTOR3 *pV2,
   );
   D3DXVECTOR3  D3DXVec3Cross(  //return  v1 x v2
   CONST D3DXVECTOR3 *pV1,
   CONST D3DXVECTOR3 *pV2,
   }
   D3DXVECTOR3  *WINAPI  D3DXVec3Normalize( 
   D3DXVECTOR3 *pOut,      //return  v / ||v||
   CONST D3DXVECTOR3  *pV
   );

    当需要使用D3DX的程序都必须链接到d3dx10.lib库文件(当使用调试模式进行编译时,应链接到d3d10d.lib

我们可以来试一试这几个函数:

#include <iostream>
//#include <D3DX10.h>
#include <D3DX10math.h>

using namespace std;


ostream&  operator<<(ostream& os,D3DXVECTOR3& v)
{

	os<<"{"<<v.x<<","<<v.y<<","<<v.z<<"}";
	return os;
}



int main()
{

	D3DXVECTOR3 u(1.0f,2.0f,3.0f);


	float  x[3] = {-2.0f,1.0,-3.0f};

	D3DXVECTOR3 v(x);


	D3DXVECTOR3  a,b,c,d,e;


	a = u+v;

	b = u-v;

	c = u*10;

	float  length = D3DXVec3Length(&u);

	D3DXVec3Normalize(&d,&u);

	float  s = D3DXVec3Dot(&u,&v);

	D3DXVec3Cross(&e,&u,&v);

	//////////////////////////////////////////

	cout<<" u = "<<u<<endl;

	cout<<" v = "<<v<<endl;

	cout<<"a = u + v   ="<<a<<endl;

	cout<<"b = u - v   ="<<b<<endl;

	cout<<"c = u * 10  ="<<c<<endl;

	cout<<"d = u / ||u||   = "<<d<<endl;

	cout<<"e = u x v   ="<<e<<endl;

	cout<<"length = ||u|| = "<<length<<endl;
	
	cout<<"s = u.v = "<<s<<endl;



	system("pause");

	return 0;
}
结果如下:

有几个地方我们需要注意:

    1,我们需要使用到的D3DXVECTOR3以及各操作函数是在头文件D3DX10math.h中定义的,因此需要包含该头文件

    2.在配置链接库的时候最好是添加上库的debug库,一般是结尾多加个d,比如d3dx10.libd3dx10d.lib

    3.不建议使用using namespace  std;这种形式,当需要使用不同域的变量或函数时容易造成干扰,产生错误,建议直接使用(域::变量),本文程序简单,为简化起见,故才这样做。

    4.重载操作符的时候一定要注意参数形式、

   5.当出现error LNK2019: 无法解析的外部符号_D3DXVec3Normalize@8,该符号在函数_main中被引用这种错误的时候,注意看看你的链接库,是不是链接到X64lib去了,改回X86的库就好了,不要因为你是64位机器就链接到X64的库,因为你创建的是Win32项目,所以只能链接到X86的库。关于这一点,后面有时间在深入探究。




原文地址:https://www.cnblogs.com/ainima/p/6331132.html