| 定数 | 解説 |
|---|---|
| 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 );ユーザーメモリポインタで指定された配列データを