Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Materialien beschreiben, wie Polygone Licht reflektieren oder in einer 3D-Szene Licht emittieren. Materialeigenschaften detailieren die diffuse Spiegelung, Umgebungsreflektion, Lichtemissionen und Glanzlichtmerkmale eines Materials. Direct3D verwendet die D3DMATERIAL9 Struktur, um alle Materialeigenschafteninformationen zu tragen. Mit Ausnahme der Glanzeigenschaft wird jede Eigenschaft als RGBA-Farbe beschrieben, die angibt, wie viel der roten, grünen und blauen Teile eines bestimmten Lichttyps, den sie widerspiegelt, und einen Alphamischungsfaktor darstellt.
Diffuse und Umgebungsreflexion
Die Diffuse- und Ambient-Elemente der D3DMATERIAL9 Struktur beschreiben, wie ein Material das Umgebungs- und diffuse Licht in einer Szene widerspiegelt. Da die meisten Szenen viel diffuses Licht als Umgebungslicht enthalten, spielt diffuse Spiegelung den größten Teil bei der Bestimmung der Farbe. Da diffuses Licht direktional ist, wirkt sich der Inzidenzwinkel für diffuses Licht auf die Gesamtintensität der Spiegelung aus. Diffuse Spiegelung ist am größten, wenn das Licht einen Scheitelpunkt parallel zur Scheitelpunktnormal überschlägt. Da sich der Winkel erhöht, verringert sich die Wirkung der diffusen Spiegelung. Die Lichtmenge, die reflektiert wird, ist der Kosinus des Winkels zwischen dem eingehenden Licht und dem Vertexnormal, wie in der folgenden Abbildung dargestellt.
Umgebungsreflexion wie Umgebungslicht ist nicht direktional. Die Umgebungsreflexion wirkt sich weniger auf die scheinbare Farbe eines gerenderten Objekts aus, wirkt sich jedoch auf die Gesamtfarbe aus und ist am deutlichsten, wenn wenig oder kein diffuses Licht vom Material reflektiert wird. Die Umgebungsreflexion eines Materials wird durch den Umgebungslichtsatz für eine Szene beeinflusst, indem die IDirect3DDevice9::SetRenderState-Methode mit der D3DRS_AMBIENT-Kennzeichnung aufgerufen wird.
Diffuse und Umgebungsreflexion arbeiten zusammen, um die wahrgenommene Farbe eines Objekts zu bestimmen und sind in der Regel identische Werte. Um beispielsweise ein blaues kristallines Objekt zu rendern, erstellen Sie ein Material, das nur die blaue Komponente von diffusem und Umgebungslicht widerspiegelt. Wenn sie in einem Raum mit einem weißen Licht platziert wird, scheint der Kristall blau zu sein. In einem Raum mit nur rotem Licht scheint das gleiche Kristall schwarz zu sein, da sein Material nicht rotes Licht widerspiegelt.
Emission
Materialien können verwendet werden, um ein gerendertes Objekt als selbstleuchtend erscheinen zu lassen. Das emissive Element der D3DMATERIAL9 Struktur wird verwendet, um die Farbe und Transparenz des ausgelassenen Lichts zu beschreiben. Die Emission wirkt sich auf die Farbe eines Objekts aus und kann z. B. ein dunkles Material heller machen und einen Teil der ausgegebenen Farbe übernehmen.
Sie können die emissive Eigenschaft eines Materials verwenden, um die Illusion hinzuzufügen, dass ein Objekt Licht ausgibt, ohne dass der Rechenaufwand für das Hinzufügen eines Lichts zur Szene entsteht. Im Fall des blauen Kristalls ist die emissive Eigenschaft nützlich, wenn Sie den Kristall aufhellen möchten, aber kein Licht auf andere Objekte in der Szene werfen. Denken Sie daran, dass Materialien mit emissiven Eigenschaften kein Licht ausgeben, das von anderen Objekten in einer Szene reflektiert werden kann. Um dieses reflektierte Licht zu erreichen, müssen Sie ein zusätzliches Licht innerhalb der Szene platzieren.
Spiegelung
Glanzreflektion schafft Hervorhebungen auf Objekten, sodass sie strahlend erscheinen. Die D3DMATERIAL9 Struktur enthält zwei Elemente, die die Glanzlichtfarbe sowie die Gesamtglanz des Materials beschreiben. Sie legen die Farbe der Glanzlichter fest, indem Sie das Glanzelement auf die gewünschte RGBA-Farbe festlegen – die häufigsten Farben sind weiß oder hellgrau. Die Werte, die Sie im Power-Member festlegen, steuern, wie scharf die Glanzeffekte sind.
Glanzlichter können dramatische Effekte erzeugen. Wieder auf die blaue Kristall analogie zeichnen: Ein größerer Power-Wert erzeugt schärfere Glanzlichter, sodass der Kristall ziemlich glänzt. Kleinere Werte erhöhen den Bereich des Effekts, wodurch eine langweilige Spiegelung entsteht, die den Kristall frostig macht. Um ein Objekt wirklich matt zu machen, legen Sie das Power-Element auf Null und die Farbe in Glanz auf Schwarz fest. Experimentieren Sie mit verschiedenen Reflexionsebenen, um ein realistisches Aussehen für Ihre Bedürfnisse zu erzeugen. Die folgende Abbildung zeigt zwei identische Modelle. Auf der linken Seite wird eine Glanzreflexkraft von 10 verwendet; das Modell auf der rechten Seite hat keine Glanzreflexion.
Festlegen von Materialeigenschaften
Direct3D-Renderinggeräte können jeweils mit einer Reihe von Materialeigenschaften gerendert werden.
In einer C++-Anwendung legen Sie die Materialeigenschaften fest, die das System verwendet, indem Sie eine D3DMATERIAL9 Struktur vorbereiten und dann die IDirect3DDevice9::SetMaterial-Methode aufrufen.
Um die D3DMATERIAL9 Struktur für die Verwendung vorzubereiten, legen Sie die Eigenschafteninformationen in der Struktur fest, um den gewünschten Effekt beim Rendern zu erstellen. Im folgenden Codebeispiel wird die D3DMATERIAL9 Struktur für ein violettes Material mit scharfen weißen Glanzlichter eingerichtet.
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;
Nachdem Sie die D3DMATERIAL9 Struktur vorbereitet haben, wenden Sie die Eigenschaften an, indem Sie die IDirect3DDevice9::SetMaterial Methode des Renderinggeräts aufrufen. Diese Methode akzeptiert die Adresse einer vorbereiteten D3DMATERIAL9 Struktur als einzigen Parameter. Sie können IDirect3DDevice9::SetMaterial mit neuen Informationen aufrufen, um die Materialeigenschaften für das Gerät zu aktualisieren. Das folgende Codebeispiel zeigt, wie dies im Code aussehen kann.
// 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.
}
Wenn Sie ein Direct3D-Gerät erstellen, wird das aktuelle Material automatisch auf den Standardwert festgelegt, der in der folgenden Tabelle angezeigt wird.
Mitglied | Wert |
---|---|
Diffundieren | (R:0, G:0, B:0, A:0) |
Specular | (R:0, G:0, B:0, A:0) |
Ambient | (R:0, G:0, B:0, A:0) |
Emissive | (R:0, G:0, B:0, A:0) |
Macht | (0.0) |
Abrufen von Materialeigenschaften
Sie rufen die Materialeigenschaften ab, die das Renderinggerät derzeit verwendet, indem Sie die IDirect3DDevice9::GetMaterial-Methode für das Gerät aufrufen. Im Gegensatz zur IDirect3DDevice9::SetMaterial-Methode erfordert IDirect3DDevice9::GetMaterial keine Vorbereitung. Die IDirect3DDevice9::GetMaterial-Methode akzeptiert die Adresse einer D3DMATERIAL9 Struktur und füllt die bereitgestellte Struktur mit Informationen, die die aktuellen Materialeigenschaften beschreiben, bevor sie zurückgegeben werden.
// 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.
}
Anmerkung
Wenn Ihre Anwendung keine Materialeigenschaften für das Rendern angibt, verwendet das System ein Standardmaterial. Das Standardmaterial spiegelt z. B. alle diffusen Licht - weiß - ohne Umgebungs- oder Glanzreflexion und keine emissive Farbe wider.
Verwandte Themen