Méthode IDirect3DDevice9 ::SetFVF (d3d9helper.h)
Définit la déclaration de flux de vertex actuelle.
Syntaxe
HRESULT SetFVF(
[in] DWORD FVF
);
Paramètres
[in] FVF
Type : DWORD
DWORD contenant le type de vertex de fonction fixe. Pour plus d’informations, consultez D3DFVF.
Valeur retournée
Type : HRESULT
Si la méthode réussit, la valeur de retour est D3D_OK. Si la méthode échoue, la valeur de retour peut être : D3DERR_INVALIDCALL.
Remarques
Voici les étapes nécessaires pour initialiser et utiliser des sommets qui ont une position, une couleur diffuse et spéculaire et des coordonnées de texture :
-
Définissez le type de vertex personnalisé et le code FVF.
struct LVertex { FLOAT x, y, z; D3DCOLOR specular, diffuse; FLOAT tu, tv; }; const DWORD VertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 );
-
Créez une mémoire tampon de vertex avec suffisamment d’espace pour quatre sommets à l’aide de IDirect3DDevice9 ::CreateVertexBuffer.
g_d3dDevice->CreateVertexBuffer( 4*sizeof(LVertex), D3DUSAGE_WRITEONLY, VertexFVF, D3DPOOL_DEFAULT, &pBigSquareVB, NULL );
-
Définissez les valeurs de chaque sommet.
LVertex * v; pBigSquareVB->Lock( 0, 0, (BYTE**)&v, 0 ); v[0].x = 0.0f; v[0].y = 10.0; v[0].z = 10.0f; v[0].diffuse = 0xffff0000; v[0].specular = 0xff00ff00; v[0].tu = 0.0f; v[0].tv = 0.0f; v[1].x = 0.0f; v[1].y = 0.0f; v[1].z = 10.0f; v[1].diffuse = 0xff00ff00; v[1].specular = 0xff00ffff; v[1].tu = 0.0f; v[1].tv = 0.0f; v[2].x = 10.0f; v[2].y = 10.0f; v[2].z = 10.0f; v[2].diffuse = 0xffff00ff; v[2].specular = 0xff000000; v[2].tu = 0.0f; v[2].tv = 0.0f; v[3].x = 0.0f; v[3].y = 10.0f; v[3].z = 10.0f; v[3].diffuse = 0xffffff00; v[3].specular = 0xffff0000; v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock();
-
La mémoire tampon de vertex a été initialisée et est prête à être restituée. L’exemple de code suivant montre comment utiliser le FVF hérité pour dessiner un carré.
g_d3dDevice->SetFVF(VertexFVF); g_d3dDevice->SetStreamSource(0, pBigSquareVB, 0, sizeof(LVertex)); g_d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2);
-
Définissez le type de vertex personnalisé et le code FVF.
struct Vertex { FLOAT x, y, z; FLOAT nx, ny, nz; FLOAT tu, tv; }; const DWORD VertexFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 );
- Créez une mémoire tampon de vertex avec suffisamment d’espace pour quatre sommets à l’aide de IDirect3DDevice9 ::CreateVertexBuffer (comme dans l’exemple ci-dessus).
-
Définissez les valeurs de chaque sommet.
Vertex * v; pBigSquareVB->Lock(0, 0, (BYTE**)&v, 0); v[0].x = 0.0f; v[0].y = 10.0; v[0].z = 10.0f; v[0].nx = 0.0f; v[0].ny = 1.0f; v[0].nz = 0.0f; v[0].tu = 0.0f; v[0].tv = 0.0f; v[1].x = 0.0f; v[1].y = 0.0f; v[1].z = 10.0f; v[1].nx = 0.0f; v[1].ny = 1.0f; v[1].nz = 0.0f; v[1].tu = 0.0f; v[1].tv = 0.0f; v[2].x = 10.0f; v[2].y = 10.0f; v[2].z = 10.0f; v[2].nx = 0.0f; v[2].ny = 1.0f; v[2].nz = 0.0f; v[2].tu = 0.0f; v[2].tv = 0.0f; v[3].x = 0.0f; v[3].y = 10.0f; v[3].z = 10.0f; v[3].nx = 0.0f; v[3].ny = 1.0f; v[3].nz = 0.0f; v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock();
- Dessinez l’objet (comme dans l’exemple ci-dessus).
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d9helper.h (inclure D3D9.h) |
Bibliothèque | D3D9.lib |
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour