DXノート-今はちょっとお腹が空いています
3488 ワード
DirectX9.0
基礎知識:クラスD 3 DXVETOR 3で3 D空間中のベクトルを表す
1.ベクトルが等しい:const float EPSILON = 0.001f;
bool Equals(float lhs, float rhs)
{
return fbs(lhs-rhs)< EPSILON ? true : false;
}
2.計算ベクトルの型:float D3DXVec3Length(const DDXVECTOR3 * pV); //
D3DXVECTOR3 v(1.f,2.0f,3.f);
float magnitude = D3DXVec3Length(&v);
3.ベクトルの正規化:D3DXVECTOR3M* D3DXVec3Normalize(
D3DXVECTOR3 * pOUT, //
const D3DVECTOR3 * pV); //
4.ベクトル加算:重荷重加算演算子(+)D 3 DXVECTOR 3 sum=u+vを加算できるのは、次元数が同じ2つのベクトルのみです.
5.ベクトル減算:減算演算子(-)D 3 DXVECTOR 3 different=u-vをリロードします.
6.数乗:D 3 DXVECTOR 3 scaledVec=u*10.0 f;
7.ポイント積:float D3DXVec3Dot(
const D3DXVECTOR3 * pV1,
const D3DXVECTOR3* pV2); //
float dot = D3DXVec3Dot(&u , &v);
8.フォーク積:左手の法則でフォーク積の方向を判断できるD3DXVECTOR3 *D3DXVec3Cross(
D3DXVECTOR3 *pOUT, //
const D3DXVECTOR3 *pV1,
const D3DXVECTOR3 *pV2);
9.行列:D3DXMATRIX M;
M(0,0) = 0.5f; //
D3DXMATRIX *D3DXMatrixIdentity(
D3DXMATRIX *pout); //
D3DXMATRIX *D3DXMatrixTranspose(
D3DXMATRIX *pout, //
const D3DXMATRIX *pM); //
D3DXMATRIX *D3DXMatrixInverse(
D3DXMATRIX *pout, //
float *pDeeterminant,
const D3DXMATRIX *pM); //
D3DXMATRIX A(...);
D3DXMATRIX B;
D3DXMatriInverse(&B , 0 , &A);
10.平行移動行列:D3DXMATRIX *D3DXMatrixTranslation(
D3DXMATRIX *pout, //
float x, // x
float y, // y
float z); // z
11.回転行列:// X
D3DXMATRIX *D3DXMatriRotationX(
D3DXMATRIX *pout,
float Angle);
// Y
D3DXMATRIX *D3DXMatriRotationY(
D3DXMATRIX *pout,
float Angle);
// Z
D3DXMATRIX *D3DXMatriRotationZ(
D3DXMATRIX *pout,
float Angle);
回転行列Rの逆行列はその回転と等しく、このような特徴を備えた行列を直交行列と呼ぶ.
12.比例変換行列D3DXMATRIX *D3DXMatrixScaling(
D3DXMATRIX *pout, //
D3DXMATRIX sx, // x
D3DXMATRIX sy, // y
D3DXMATRIX sz); // z
13.ベクトルと点の変換// , 4 1
D3DXVECTOR3 *D3DXVec3TransformCoord(
D3DXVECTOR3*pout,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pm);
// , 4 0
D3DXVECTOR3 *D3DXVec3TransformNormal(
D3DXVECTOR3 *pout,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM);
14.COM(コンポーネントオブジェクトモデル)COMインタフェースを作成する時、C++キーワードnewを使用してはいけない.1つのインタフェースを使用し終わったら、そのインタフェースに対応するReleaseメソッドを呼び出す必要があります.COMインタフェースにはプレフィックスが1つある.
15.表面は、Direct 3 Dが主に2 D画像データを記憶する画素行列である.本質的には線形配列である.幅(width)と高さ(height)は画素で測定され、スパン(pitch)はバイトで測定される.// _surface IDirect3DSurface9 interface
//
D3DSURFACE_DESC sufaceDesc;
_surface->GetDesc(& surfaceDesc);
//
D3DLOCKED_RECT lockedRect;
_surface->LockedRect(
& lockedRect, //
0, //
0); //
//
DWORD * imageData = (DWORD *)lockedRect.pBits;
for(int i = 0; i < surfaceDesc.Height ; i++)
{
for(int j=0; jUnlockedRect();
const float EPSILON = 0.001f;
bool Equals(float lhs, float rhs)
{
return fbs(lhs-rhs)< EPSILON ? true : false;
}
float D3DXVec3Length(const DDXVECTOR3 * pV); //
D3DXVECTOR3 v(1.f,2.0f,3.f);
float magnitude = D3DXVec3Length(&v);
D3DXVECTOR3M* D3DXVec3Normalize(
D3DXVECTOR3 * pOUT, //
const D3DVECTOR3 * pV); //
float D3DXVec3Dot(
const D3DXVECTOR3 * pV1,
const D3DXVECTOR3* pV2); //
float dot = D3DXVec3Dot(&u , &v);
D3DXVECTOR3 *D3DXVec3Cross(
D3DXVECTOR3 *pOUT, //
const D3DXVECTOR3 *pV1,
const D3DXVECTOR3 *pV2);
D3DXMATRIX M;
M(0,0) = 0.5f; //
D3DXMATRIX *D3DXMatrixIdentity(
D3DXMATRIX *pout); //
D3DXMATRIX *D3DXMatrixTranspose(
D3DXMATRIX *pout, //
const D3DXMATRIX *pM); //
D3DXMATRIX *D3DXMatrixInverse(
D3DXMATRIX *pout, //
float *pDeeterminant,
const D3DXMATRIX *pM); //
D3DXMATRIX A(...);
D3DXMATRIX B;
D3DXMatriInverse(&B , 0 , &A);
D3DXMATRIX *D3DXMatrixTranslation(
D3DXMATRIX *pout, //
float x, // x
float y, // y
float z); // z
// X
D3DXMATRIX *D3DXMatriRotationX(
D3DXMATRIX *pout,
float Angle);
// Y
D3DXMATRIX *D3DXMatriRotationY(
D3DXMATRIX *pout,
float Angle);
// Z
D3DXMATRIX *D3DXMatriRotationZ(
D3DXMATRIX *pout,
float Angle);
D3DXMATRIX *D3DXMatrixScaling(
D3DXMATRIX *pout, //
D3DXMATRIX sx, // x
D3DXMATRIX sy, // y
D3DXMATRIX sz); // z
// , 4 1
D3DXVECTOR3 *D3DXVec3TransformCoord(
D3DXVECTOR3*pout,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pm);
// , 4 0
D3DXVECTOR3 *D3DXVec3TransformNormal(
D3DXVECTOR3 *pout,
CONST D3DXVECTOR3 *pV,
CONST D3DXMATRIX *pM);
// _surface IDirect3DSurface9 interface
//
D3DSURFACE_DESC sufaceDesc;
_surface->GetDesc(& surfaceDesc);
//
D3DLOCKED_RECT lockedRect;
_surface->LockedRect(
& lockedRect, //
0, //
0); //
//
DWORD * imageData = (DWORD *)lockedRect.pBits;
for(int i = 0; i < surfaceDesc.Height ; i++)
{
for(int j=0; jUnlockedRect();