Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les matériaux décrivent comment les polygones reflètent la lumière ou semblent émettre de la lumière dans une scène 3D. Les propriétés matérielles détaillent la réflexion diffuse d’un matériau, la réflexion ambiante, l’émission de lumière et les caractéristiques de mise en surbrillance spéculaire. Direct3D utilise la structure D3DMATERIAL9 pour transporter toutes les informations de propriété matérielle. À l’exception de la propriété spéculaire, chaque propriété est décrite comme une couleur RVBA qui représente la quantité de parties rouges, vertes et bleues d’un type donné de lumière qu’elle reflète, et un facteur de fusion alpha.
Réflexion diffuse et ambiante
Les membres diffuse et ambiant de la structure D3DMATERIAL9 décrivent comment un matériau reflète la lumière ambiante et diffuse dans une scène. Étant donné que la plupart des scènes contiennent beaucoup plus de lumière diffuse que la lumière ambiante, la réflexion diffuse joue le plus grand rôle dans la détermination de la couleur. En outre, étant donné que la lumière diffuse est directionnelle, l’angle d’incidence de la lumière diffuse affecte l’intensité globale de la réflexion. La réflexion diffuse est la plus grande lorsque la lumière frappe un sommet parallèle à la normale du sommet. À mesure que l’angle augmente, l’effet de la réflexion diffuse diminue. La quantité de lumière réfléchie est le cosinus de l’angle entre la lumière entrante et la normale de vertex, comme illustré dans l’illustration suivante.
La réflexion ambiante, comme la lumière ambiante, est nondirectionnelle. La réflexion ambiante a un impact moindre sur la couleur apparente d’un objet rendu, mais elle affecte la couleur globale et est le plus visible lorsque peu ou pas de lumière diffuse reflète le matériau. La réflexion ambiante d’un matériau est affectée par la lumière ambiante définie pour une scène en appelant la méthode IDirect3DDevice9 ::SetRenderState avec l’indicateur D3DRS_AMBIENT.
La réflexion diffuse et ambiante fonctionne ensemble pour déterminer la couleur perçue d’un objet et sont généralement des valeurs identiques. Par exemple, pour restituer un objet crystal bleu, vous créez un matériau qui reflète uniquement le composant bleu de la lumière diffuse et ambiante. Lorsqu’il est placé dans une pièce avec une lumière blanche, le cristal semble être bleu. Toutefois, dans une pièce qui n’a que la lumière rouge, le même cristal semble être noir, car son matériau ne reflète pas la lumière rouge.
Émission
Les matériaux peuvent être utilisés pour rendre un objet rendu semble être lumineux auto-lumineux. Le membre Emissive de la structure D3DMATERIAL9 est utilisé pour décrire la couleur et la transparence de la lumière émise. L’émission affecte la couleur d’un objet et peut, par exemple, rendre un matériau sombre plus lumineux et prendre partie de la couleur émise.
Vous pouvez utiliser la propriété emissive d’un matériau pour ajouter l’illusion qu’un objet émet de la lumière, sans entraîner la surcharge de calcul de l’ajout d’une lumière à la scène. Dans le cas du cristal bleu, la propriété emissive est utile si vous souhaitez que le cristal apparaisse à l’éclairage, mais pas à émettre de la lumière sur d’autres objets de la scène. N’oubliez pas que les matériaux avec des propriétés émissives n’émettent pas de lumière qui peut être reflétée par d’autres objets d’une scène. Pour obtenir cette lumière réfléchie, vous devez placer une lumière supplémentaire dans la scène.
Réflexion spéculaire
La réflexion spéculaire crée des surbrillances sur les objets, ce qui les rend brillants. La structure D3DMATERIAL9 contient deux membres qui décrivent la couleur de surbrillance spéculaire ainsi que la brillance globale du matériau. Vous établissez la couleur des surbrillances spéculaires en définissant le membre spéculaire sur la couleur RVBA souhaitée . Les couleurs les plus courantes sont blancs ou gris clair. Les valeurs que vous définissez dans le membre Power contrôlent la netteté des effets spéculaires.
Les surbrillances spéculaires peuvent créer des effets spectaculaires. Dessinez à nouveau sur l’analogie du cristal bleu : une plus grande valeur de puissance crée des surbrillances spéculaires plus nettes, ce qui fait que le cristal semble être assez brillant. Les valeurs plus petites augmentent la zone de l’effet, créant une réflexion terne qui rendent le cristal gelé. Pour rendre un objet vraiment mat, définissez le membre Power sur zéro et la couleur en Specular sur noir. Expérimentez avec différents niveaux de réflexion pour produire une apparence réaliste pour vos besoins. L’illustration suivante montre deux modèles identiques. Celui sur la gauche utilise une puissance de réflexion spéculaire de 10 ; le modèle à droite n’a pas de réflexion spéculaire.
illustration 
Définition des propriétés de matériau
Les appareils de rendu Direct3D peuvent s’afficher avec un ensemble de propriétés de matériau à la fois.
Dans une application C++, vous définissez les propriétés matérielles que le système utilise en préparant une structure D3DMATERIAL9, puis en appelant la méthode IDirect3DDevice9 ::SetMaterial.
Pour préparer la structure D3DMATERIAL9 à utiliser, définissez les informations de propriété dans la structure pour créer l’effet souhaité pendant le rendu. L’exemple de code suivant configure la structure D3DMATERIAL9 pour un matériau violet avec des surbrillances spéculaires blanches nettes.
D3DMATERIAL9 mat;
// Set the RGBA for diffuse reflection.
mat.Diffuse.r = 0.5f;
mat.Diffuse.g = 0.0f;
mat.Diffuse.b = 0.5f;
mat.Diffuse.a = 1.0f;
// Set the RGBA for ambient reflection.
mat.Ambient.r = 0.5f;
mat.Ambient.g = 0.0f;
mat.Ambient.b = 0.5f;
mat.Ambient.a = 1.0f;
// Set the color and sharpness of specular highlights.
mat.Specular.r = 1.0f;
mat.Specular.g = 1.0f;
mat.Specular.b = 1.0f;
mat.Specular.a = 1.0f;
mat.Power = 50.0f;
// Set the RGBA for emissive color.
mat.Emissive.r = 0.0f;
mat.Emissive.g = 0.0f;
mat.Emissive.b = 0.0f;
mat.Emissive.a = 0.0f;
Après avoir préparé la structure D3DMATERIAL9, vous appliquez les propriétés en appelant la méthode IDirect3DDevice9 ::SetMaterial de l’appareil de rendu. Cette méthode accepte l’adresse d’une structure D3DMATERIAL9 préparée comme seul paramètre. Vous pouvez appeler IDirect3DDevice9 ::SetMaterial avec de nouvelles informations si nécessaire pour mettre à jour les propriétés matérielles de l’appareil. L’exemple de code suivant montre comment cela peut ressembler dans le code.
// This code example uses the material properties defined for
// the mat variable earlier in this topic. The pd3dDev is assumed
// to be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
hr = pd3dDev->SetMaterial(&mat);
if(FAILED(hr))
{
// Code to handle the error goes here.
}
Lorsque vous créez un appareil Direct3D, le matériau actuel est automatiquement défini sur la valeur par défaut indiquée dans le tableau suivant.
| Membre | Valeur |
|---|---|
| Diffus | (R :0, G :0, B :0, A :0) |
| Spéculaire | (R :0, G :0, B :0, A :0) |
| Ambiant | (R :0, G :0, B :0, A :0) |
| Emissive | (R :0, G :0, B :0, A :0) |
| Pouvoir | (0.0) |
Récupération des propriétés de matériel
Vous récupérez les propriétés matérielles que l’appareil de rendu utilise actuellement en appelant la méthode IDirect3DDevice9 ::GetMaterial pour l’appareil. Contrairement à la méthode IDirect3DDevice9 ::SetMaterial, IDirect3DDevice9 ::GetMaterial ne nécessite pas de préparation. La méthode IDirect3DDevice9 ::GetMaterial accepte l’adresse d’une structure D3DMATERIAL9 et remplit la structure fournie avec des informations décrivant les propriétés matérielles actuelles avant de retourner.
// For this example, the pd3dDev variable is assumed to
// be a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
D3DMATERIAL9 mat;
hr = pd3dDev->GetMaterial(&mat);
if(FAILED(hr))
{
// Code to handle the error goes here.
}
Note
Si votre application ne spécifie pas de propriétés matérielles pour le rendu, le système utilise un matériau par défaut. Le matériau par défaut reflète toutes les lumières diffuses , blanches, par exemple, sans réflexion ambiante ou spéculaire, et aucune couleur émissive.
Rubriques connexes