【D3D Review】D3DX基础数学知识
来源:互联网 发布:淘宝仓库一般要做什么 编辑:程序博客网 时间:2024/05/15 13:26
上周参加了搜狐畅游的笔试,有点鄙视自己了,发现很多东西都忘了,基础非常薄弱,手太低,于是重学D3D和OpenGL。
1.FLOAT D3DXVec3Length( // Returns the magnitude.
CONST D3DXVECTOR3* pV // The vector to compute the length of.
);
D3DXVECTOR3 v(1.0f, 2.0f, 3.0f);
float magnitude = D3DXVec3Length( &v ); // = sqrt(14) 计算向量长度 模
2.归一化向量
D3DXVECTOR3 *D3DXVec3Normalize(
D3DXVECTOR3* pOut, // Result.
CONST D3DXVECTOR3* pV // The vector to normalize.
);
3.向量加
D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);
// (2.0 + 0.0, 0.0 + (-1.0), 1.0 + 5.0)
D3DXVECTOR3 sum = u + v; // = (2.0f, -1.0f, 6.0f)
4.向量减法
D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);
D3DXVECTOR3 difference = u - v; // = (2.0f, 1.0f, -4.0f)
5.向量缩放
D3DXVECTOR3 u(1.0f, 1.0f, -1.0f);
D3DXVECTOR3 scaledVec = u * 10.0f; // = (10.0f, 10.0f, -10.0f)
6.向量的点积
U.V = Ux*Vx + Uy*Vy + UzVz = S
U.V = |U||V|cos Theta
如果u · v = 0 则u v垂直;
如果u · v > 0 则u v夹角小于90度;
如果u · v < 0 则u v夹角大于90度。
FLOAT D3DXVec3Dot( // Returns the result.
CONST D3DXVECTOR3* pV1, // Left sided operand.
CONST D3DXVECTOR3* pV2 // Right sided operand.
);
D3DXVECTOR3 u(1.0f, -1.0f, 0.0f);
D3DXVECTOR3 v(3.0f, 2.0f, 1.0f);
// 1.0*3.0 + -1.0*2.0 + 0.0*1.0
// = 3.0 + -2.0
float dot = D3DXVec3Dot( &u, &v ); // = 1.0
7.向量叉积
p = u X v = [(UyVz-UzVy), (UzVx-UxVz), (UxVy-UyVx)]
Px = UyVz-UzVy;
Py = UzVx-UxVz;
Pz = UxVy-UyVx;
u X v = -(v X U) 可见叉乘不可交换
D3DXVECTOR3 *D3DXVec3Cross(
D3DXVECTOR3* pOut, // Result.
CONST D3DXVECTOR3* pV1, // Left sided operand.
CONST D3DXVECTOR3* pV2 // Right sided operand.
);
8.矩阵的数乘、加法、乘法
二、D3DX矩阵
D3D关注4X4矩阵和1X4矩阵(行向量)
1.
向量-矩阵乘法:1X4行向量乘以4X4矩阵,结果仍为1X4行向量,比如向量的平移、旋转、变换
矩阵-矩阵乘法:4X4矩阵右乘4X4矩阵,结果仍为4X4矩阵,比如变换的叠加等。
2.D3DX中矩阵的定义
简单D3DMATRIX结构:
初始化和乘法:
元素访问:
1.FLOAT D3DXVec3Length( // Returns the magnitude.
CONST D3DXVECTOR3* pV // The vector to compute the length of.
);
D3DXVECTOR3 v(1.0f, 2.0f, 3.0f);
float magnitude = D3DXVec3Length( &v ); // = sqrt(14) 计算向量长度 模
2.归一化向量
D3DXVECTOR3 *D3DXVec3Normalize(
D3DXVECTOR3* pOut, // Result.
CONST D3DXVECTOR3* pV // The vector to normalize.
);
3.向量加
D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);
// (2.0 + 0.0, 0.0 + (-1.0), 1.0 + 5.0)
D3DXVECTOR3 sum = u + v; // = (2.0f, -1.0f, 6.0f)
4.向量减法
D3DXVECTOR3 u(2.0f, 0.0f, 1.0f);
D3DXVECTOR3 v(0.0f, -1.0f, 5.0f);
D3DXVECTOR3 difference = u - v; // = (2.0f, 1.0f, -4.0f)
5.向量缩放
D3DXVECTOR3 u(1.0f, 1.0f, -1.0f);
D3DXVECTOR3 scaledVec = u * 10.0f; // = (10.0f, 10.0f, -10.0f)
6.向量的点积
U.V = Ux*Vx + Uy*Vy + UzVz = S
U.V = |U||V|cos Theta
如果u · v = 0 则u v垂直;
如果u · v > 0 则u v夹角小于90度;
如果u · v < 0 则u v夹角大于90度。
FLOAT D3DXVec3Dot( // Returns the result.
CONST D3DXVECTOR3* pV1, // Left sided operand.
CONST D3DXVECTOR3* pV2 // Right sided operand.
);
D3DXVECTOR3 u(1.0f, -1.0f, 0.0f);
D3DXVECTOR3 v(3.0f, 2.0f, 1.0f);
// 1.0*3.0 + -1.0*2.0 + 0.0*1.0
// = 3.0 + -2.0
float dot = D3DXVec3Dot( &u, &v ); // = 1.0
7.向量叉积
p = u X v = [(UyVz-UzVy), (UzVx-UxVz), (UxVy-UyVx)]
Px = UyVz-UzVy;
Py = UzVx-UxVz;
Pz = UxVy-UyVx;
u X v = -(v X U) 可见叉乘不可交换
D3DXVECTOR3 *D3DXVec3Cross(
D3DXVECTOR3* pOut, // Result.
CONST D3DXVECTOR3* pV1, // Left sided operand.
CONST D3DXVECTOR3* pV2 // Right sided operand.
);
8.矩阵的数乘、加法、乘法
二、D3DX矩阵
D3D关注4X4矩阵和1X4矩阵(行向量)
1.
向量-矩阵乘法:1X4行向量乘以4X4矩阵,结果仍为1X4行向量,比如向量的平移、旋转、变换
矩阵-矩阵乘法:4X4矩阵右乘4X4矩阵,结果仍为4X4矩阵,比如变换的叠加等。
2.D3DX中矩阵的定义
- typedef struct D3DXMATRIX : public D3DMATRIX
- {
- public:
- D3DXMATRIX() {};
- D3DXMATRIX(CONST FLOAT*);
- D3DXMATRIX(CONST D3DMATRIX&);
- // 矩阵元素
- D3DXMATRIX(FLOAT _11, FLOAT _12, FLOAT _13, FLOAT _14,
- FLOAT _21, FLOAT _22, FLOAT _23, FLOAT _24,
- FLOAT _31, FLOAT _32, FLOAT _33, FLOAT _34,
- FLOAT _41, FLOAT _42, FLOAT _43, FLOAT _44);
- // access grants
- FLOAT& operator () (UINT Row, UINT Col);
- FLOAT operator () (UINT Row, UINT Col) const;
- // casting operators
- operator FLOAT* ();
- operator CONST FLOAT* () const;
- // assignment operators
- D3DXMATRIX& operator *= (CONST D3DXMATRIX&);
- D3DXMATRIX& operator += (CONST D3DXMATRIX&);
- D3DXMATRIX& operator -= (CONST D3DXMATRIX&);
- D3DXMATRIX& operator *= (FLOAT);
- D3DXMATRIX& operator /= (FLOAT);
- // unary operators
- D3DXMATRIX operator + () const;
- D3DXMATRIX operator - () const;
- // binary operators
- D3DXMATRIX operator * (CONST D3DXMATRIX&) const;
- D3DXMATRIX operator + (CONST D3DXMATRIX&) const;
- D3DXMATRIX operator - (CONST D3DXMATRIX&) const;
- D3DXMATRIX operator * (FLOAT) const;
- D3DXMATRIX operator / (FLOAT) const;
- friend D3DXMATRIX operator * (FLOAT, CONST D3DXMATRIX&);
- BOOL operator == (CONST D3DXMATRIX&) const;
- BOOL operator != (CONST D3DXMATRIX&) const;
- } D3DXMATRIX, *LPD3DXMATRIX;
- typedef struct _D3DMATRIX {
- union {
- struct {
- float _11, _12, _13, _14;
- float _21, _22, _23, _24;
- float _31, _32, _33, _34;
- float _41, _42, _43, _44;
- };
- float m[4][4];
- };
- } D3DMATRIX;
- D3DXMATRIX A(…); // initialize A
- D3DXMATRIX B(…); // initialize B
- D3DXMATRIX C = A * B; // C = AB
- D3DXMATRIX M;
- M(0, 0) = 5.0f; // Set entry (i=1 j = 1) to 5.0f. 将左上角元素设为5.0f
- // 求单位矩阵
- D3DXMATRIX *D3DXMatrixIdentity(
- D3DXMATRIX *pout // The matrix to be set to the identity.
- );
- D3DXMATRIX M;
- D3DXMatrixIdentity( &M ); // M = identity matrix
- // 求矩阵的转置
- D3DXMATRIX *D3DXMatrixTranspose(
- D3DXMATRIX *pOut, // The resulting transposed matrix.
- CONST D3DXMATRIX *pM // The matrix to take the transpose of.
- );
- D3DXMATRIX A(...); // initialize A
- D3DXMATRIX B;
- D3DXMatrixTranspose( &B, &A ); // B = transpose(A)
- // 求矩阵的逆矩阵
- D3DXMATRIX *D3DXMatrixInverse(
- D3DXMATRIX *pOut, // returns inverse of pM
- FLOAT *pDeterminant, // determinant, if required, else pass 0
- CONST D3DXMATRIX *pM // matrix to invert
- );
- 【D3D Review】D3DX基础数学知识
- 【D3DX日记】D3D与D3DX的区别
- D3D Intro - Difference of D3D and D3DX
- 【D3D Review】3
- 【D3D Review】4 纹理
- 【D3D Review】Blending 混合
- 基础数学知识
- 数据结构基础数学知识
- 基础数学知识整理(1)
- OpenGL_01_基础和数学知识(上)
- 数据挖掘基础数学知识博客
- 深度学习基础数学知识整理
- d3d设备基础
- D3D纹理基础
- d3d基础入门
- 数学知识
- 数学知识
- 数学知识
- 利用GClientGeocoder類實現找圖功能
- 2008无线站点、客户端、手游TOP50揭晓!
- 15. EXP 和 IMP
- 精通 Grails: 用 Groovy 服务器页面(GSP)改变视图
- 用AJAX实现google输入自动完成的简单模拟
- 【D3D Review】D3DX基础数学知识
- 使用HTTPSERVICE的缓存问题
- C#实现屏幕键盘(软键盘 ScreenKeyboard)
- 怎样区分一款虚拟主机的好坏
- 单线程也可能引发"并发"访问异常
- 消息称腾讯将加入SNS网站的市场争夺,新产品即将上线
- 系统监控开源工具软件FMS简介
- SQL自定义函数
- AMR音频编解码