定数 | 解説 |
---|---|
D3DFVF_DIFFUSE | 頂点フォーマットがディフューズ色成分を含む |
D3DFVF_NORMAL | 頂点フォーマットが頂点法線ベクトルを含む このフラグを、D3DFVF_XYZRHW と共に使用することはできない |
D3DFVF_PSIZE | 頂点フォーマットはポイント サイズで指定されている このサイズは、トランスフォーム済みでも ライティング済みでもない頂点に対するカメラ空間単位 およびトランスフォーム済みでライティング済みの 頂点に対するデバイス空間単位で表されている |
D3DFVF_SPECULAR | 頂点フォーマットがスペキュラ色成分を含む |
D3DFVF_XYZ | 頂点フォーマットが未トランスフォーム頂点の位置座標を含む このフラグを、D3DFVF_XYZRHW と共に使用することはできない |
D3DFVF_XYZRHW | 頂点フォーマットが、トランスフォームされた頂点の位置座標を含む このフラグを D3DFVF_XYZ または D3DFVF_NORMAL フラグと同時に使用することはできない |
D3DFVF_XYZB1 〜 D3DFVF_XYZB5 | 頂点フォーマットは、位置座標データ および複数の行列による 頂点ブレンディング処理用の加重 (ベータ) 値の対応数を含む 現在、MicrosoftR Direct3DR では最大 3 つの加重値 および 4 つのブレンディング行列でブレンディングが可能である |
D3DFVF_TEX0 〜 D3DFVF_TEX8 | この頂点に対応するテクスチャ座標セットの番号 これらのフラグに対応する数字は連続番号になっていない |
D3DFVF_TEXTUREFORMAT1 〜 D3DFVF_TEXTUREFORMAT4 | テクスチャ座標セットを定義する値の番号 D3DFVF_TEXTUREFORMAT1 は 1 次元座標を示し D3DFVF_TEXTUREFORMAT2 は 2 次元座標を示し、という順に以下続く このフラグが単独で使用されることはまれで D3DFVF_TEXCOORDSIZEn マクロと共に使用される |
D3DFVF_POSITION_MASK | 位置座標ビットを抽出するマスク |
D3DFVF_RESERVED0 D3DFVF_RESERVED2 | 柔軟な頂点フォーマットの予約ビットを抽出するためのマスク値 使用不可 |
D3DFVF_TEXCOUNT_MASK | テクスチャ フラグ ビットを抽出するためのマスク値 |
D3DFVF_LASTBETA_UBYTE4 | インデックス付き頂点ブレンディングと 固定機能 FVF 頂点シェーダを使用する場合は 頂点シェーダにこのフラグを指定しなければならない |
D3DFVF_TEXCOUNT_SHIFT | 頂点のテクスチャ座標数を 識別する整数値を何ビット分シフトするかを示す数 |
意味とフラグ | 型 | |
---|---|---|
座標位置 D3DFVF_XYZ | x 座標 (float) y 座標(float) z 座標(float) | |
同次座標ベクトル D3DFVF_XYZRHW | rhw (float) | |
ブレンディングウェイト D3DFVF_XYZB1 〜 D3DFVF_XYZB5 | 1 〜 5 個のデータ (float) | |
頂点法線 D3DFVF_NORMAL | 法線 x (float) 法線 y (float) 法線 z (float) | |
ディフューズ色 D3DFVF_DIFFUSE | RGBA (DWORD) | |
スペキュラ色 D3DFVF_SPECULAR | RGBA (DWORD) | |
テクスチャ座標セット D3DFVF_TEX0 〜 D3DFVF_TEX8 | テクスチャ座標データ D3DFVF_TEXTUREFORMAT1 〜 D3DFVF_TEXTUREFORMAT4 | 1 〜 4 のデータ (float) |
struct { float x , y , z , rhw; DWORD color; };ポリゴンを描画する時に、頂点の位置や色を指定するために
HRESULT DrawPrimitiveUP( D3DPRIMITIVETYPE PrimitiveType , UINT PrimitiveCount , CONST void* pVertexStreamZeroData , UINT VertexStreamZeroStride );PrimitiveType には、D3DPRIMITIVETYPE 列挙型から、プリミティブ型を指定します
typedef enum _D3DPRIMITIVETYPE { D3DPT_POINTLIST = 1, D3DPT_LINELIST = 2, D3DPT_LINESTRIP = 3, D3DPT_TRIANGLELIST = 4, D3DPT_TRIANGLESTRIP = 5, D3DPT_TRIANGLEFAN = 6, D3DPT_FORCE_DWORD = 0x7fffffff } D3DPRIMITIVETYPE;この列挙型のメンバは、以下のような意味を持っています
定数 | 解説 |
---|---|
D3DPT_POINTLIST | 頂点を別個の点の集合としてレンダリングする |
D3DPT_LINELIST | 別個の線分のリストとして頂点をレンダリングする このプリミティブ タイプを使用する呼び出しは カウントが 2 より小さいか、奇数の場合は失敗する |
D3DPT_LINESTRIP | 頂点を単一のポリラインとしてレンダリングする このプリミティブ タイプを使用する呼び出しは カウントが 2 より小さい場合は失敗する |
D3DPT_TRIANGLELIST | 別個の三角形の連続として指定の頂点をレンダリングする 各 3 頂点のグループは個別に三角形を定義する 背面のカリングは、現在のカリング モード レンダリング ステートの影響を受ける |
D3DPT_TRIANGLESTRIP | 頂点を三角形の展開図としてレンダリングする 背面カリング フラグは、偶数番号の三角形で自動的に反転する |
D3DPT_TRIANGLEFAN | 頂点を三角形の扇形としてレンダリングする |
D3DPT_FORCE_DWORD | この列挙型を強制的に 32 ビット サイズにコンパイルする この値は使用されていない |
D3DPT_POINTLIST | D3DPT_LINELIST | D3DPT_LINESTRIP |
---|---|---|
D3DPT_TRIANGLELIST | D3DPT_TRIANGLESTRIP | D3DPT_TRIANGLEFAN |
#include <windows.h> #include <d3d8.h> #define TITLE TEXT("Kitty on your lap") IDirect3D8 * pDirect3D; IDirect3DDevice8 * pD3Device; D3DPRESENT_PARAMETERS d3dpp; typedef struct { float x , y , z , rhw; DWORD diff; } D3DVERTEX; LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) { static D3DVERTEX pt[3] = { {200 , 10 , 1 , 1 , 0xFFFF0000} , {400 , 200 , 1 , 1 , 0xFFFF0000} , {10 , 200 , 1 , 1 , 0xFFFF0000} }; switch (msg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: if (!pD3Device) break; pD3Device->Clear(0 , NULL , D3DCLEAR_TARGET , D3DCOLOR_XRGB(0xFF , 0xFF , 0xFF) , 1.0 , 0); pD3Device->BeginScene(); pD3Device->SetVertexShader(D3DFVF_XYZRHW | D3DFVF_DIFFUSE); pD3Device->DrawPrimitiveUP( D3DPT_TRIANGLELIST, 1 , pt , sizeof (D3DVERTEX) ); pD3Device->EndScene(); pD3Device->Present(NULL,NULL,NULL,NULL); ValidateRect(hWnd , NULL); return 0; case WM_SIZE: if (!pD3Device) return 0; d3dpp.BackBufferWidth = LOWORD(lp); d3dpp.BackBufferHeight = HIWORD(lp); pD3Device->Reset(&d3dpp); return 0; } return DefWindowProc(hWnd , msg , wp , lp); } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow) { MSG msg; HWND hWnd; WNDCLASS winc; D3DDISPLAYMODE d3ddm; pDirect3D = Direct3DCreate8(D3D_SDK_VERSION); pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT , &d3ddm); ZeroMemory(&d3dpp , sizeof (D3DPRESENT_PARAMETERS)); d3dpp.BackBufferFormat = d3ddm.Format; d3dpp.BackBufferCount = 1; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.Windowed = TRUE; winc.style = CS_HREDRAW | CS_VREDRAW; winc.lpfnWndProc = WndProc; winc.cbClsExtra = winc.cbWndExtra = 0; winc.hInstance = hInstance; winc.hIcon = LoadIcon(NULL , IDI_APPLICATION); winc.hCursor = LoadCursor(NULL , IDC_ARROW); winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); winc.lpszMenuName = NULL; winc.lpszClassName = TEXT("KITTY"); if (!RegisterClass(&winc)) return 0; hWnd = CreateWindow( TEXT("KITTY") , TITLE , WS_OVERLAPPEDWINDOW | WS_VISIBLE , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , CW_USEDEFAULT , NULL , NULL , hInstance , NULL ); if (!hWnd) return 0; pDirect3D->CreateDevice( D3DADAPTER_DEFAULT , D3DDEVTYPE_HAL , hWnd , D3DCREATE_SOFTWARE_VERTEXPROCESSING , &d3dpp , &pD3Device ); while (GetMessage(&msg , NULL , 0 , 0 )) { TranslateMessage(&msg); DispatchMessage(&msg); } pDirect3D->Release(); pD3Device->Release(); return msg.wParam; }
定数 | 解説 |
---|---|
D3DFVF_DIFFUSE | 頂点フォーマットがディフューズ色成分を含む |
D3DFVF_NORMAL | 頂点フォーマットが頂点法線ベクトルを含む このフラグを、D3DFVF_XYZRHW と共に使用することはできない |
D3DFVF_PSIZE | 頂点フォーマットはポイント サイズで指定されている このサイズは、トランスフォーム済みでも ライティング済みでもない頂点に対するカメラ空間単位 およびトランスフォーム済みでライティング済みの 頂点に対するデバイス空間単位で表されている |
D3DFVF_SPECULAR | 頂点フォーマットがスペキュラ色成分を含む |
D3DFVF_XYZ | 頂点フォーマットが未トランスフォーム頂点の位置座標を含む このフラグを、D3DFVF_XYZRHW と共に使用することはできない |
D3DFVF_XYZRHW | 頂点フォーマットが、トランスフォームされた頂点の位置座標を含む このフラグを D3DFVF_XYZ または D3DFVF_NORMAL フラグと同時に使用することはできない |
D3DFVF_XYZB1 〜 D3DFVF_XYZB5 | 頂点フォーマットは、位置座標データ および複数の行列による 頂点ブレンディング処理用の加重 (ベータ) 値の対応数を含む 現在、MicrosoftR Direct3DR では最大 3 つの加重値 および 4 つのブレンディング行列でブレンディングが可能である |
D3DFVF_TEX0 〜 D3DFVF_TEX8 | この頂点に対応するテクスチャ座標セットの番号 これらのフラグに対応する数字は連続番号になっていない |
D3DFVF_TEXTUREFORMAT1 〜 D3DFVF_TEXTUREFORMAT4 | テクスチャ座標セットを定義する値の番号 D3DFVF_TEXTUREFORMAT1 は 1 次元座標を示し D3DFVF_TEXTUREFORMAT2 は 2 次元座標を示し、という順に以下続く このフラグが単独で使用されることはまれで D3DFVF_TEXCOORDSIZEn マクロと共に使用される |
D3DFVF_POSITION_MASK | 位置座標ビットを抽出するマスク |
D3DFVF_RESERVED0 D3DFVF_RESERVED2 | 柔軟な頂点フォーマットの予約ビットを抽出するためのマスク値 使用不可 |
D3DFVF_TEXCOUNT_MASK | テクスチャ フラグ ビットを抽出するためのマスク値 |
D3DFVF_LASTBETA_UBYTE4 | インデックス付き頂点ブレンディングと 固定機能 FVF 頂点シェーダを使用する場合は 頂点シェーダにこのフラグを指定しなければならない |
D3DFVF_TEXCOUNT_SHIFT | 頂点のテクスチャ座標数を 識別する整数値を何ビット分シフトするかを示す数 |
HRESULT DrawPrimitiveUP( D3DPRIMITIVETYPE PrimitiveType , UINT PrimitiveCount , CONST void* pVertexStreamZeroData , UINT VertexStreamZeroStride );ユーザーメモリポインタで指定された配列データを