Malzemeler (Direct3D 9)
Malzemeler, çokgenlerin 3B bir görünümde ışığı nasıl yansıttıklarını veya ışık yaymak için nasıl göründüklerini açıklar. Malzeme özellikleri, bir malzemenin dağınık yansımasını, ortam yansımasını, ışık emisyonlarını ve belirtik vurgu özelliklerini ayrıntılandırıyor. Direct3D, tüm malzeme özelliği bilgilerini taşımak için D3DMATERIAL9 yapısını kullanır. Belirtik özellik dışında, her özellik, belirli bir ışık türünün kırmızı, yeşil ve mavi parçalarının ne kadarını yansıttığını ve alfa karıştırma faktörünü temsil eden bir RGBA rengi olarak tanımlanır.
Yayılma ve Ortam Yansıması
D3DMATERIAL9 yapısının Diffuse ve Ambient üyeleri, bir malzemenin bir sahnedeki ortam ve yayma ışığını nasıl yansıtdığını açıklar. Çoğu sahne ortam ışığına göre çok daha fazla dağınık ışık içerdiğinden, dağınık yansıma renk belirlemede en büyük rolü oynar. Ayrıca, yayma ışığı yönsel olduğundan, diffüz ışığın insidans açısı yansımanın genel yoğunluğunu etkiler. Yayma yansıması, ışık köşeyi normal köşeye paralel olarak vurduğunda en büyüktür. Açı arttıkça, yayma yansımasının etkisi azalır. Yansıtılan ışık miktarı, aşağıdaki çizimde gösterildiği gibi gelen ışık ile normal köşe arasındaki açının kosinüsüdür.
Yansıtılan ışıkçizimi
Ortam ışığı gibi ortam yansıması da dolaylı değildir. Ortam yansıması, işlenen nesnenin görünür rengi üzerinde daha az etkiye sahiptir, ancak genel rengi etkiler ve fark edilen ışık malzemeden çok az veya hiç yansımadığında en belirgindir. Bir malzemenin ortam yansıması, IDirect3DDevice9::SetRenderState yöntemini D3DRS_AMBIENT bayrağıyla çağırarak bir sahne için ortam ışığı kümesinden etkilenir.
Yayılma ve ortam yansıması, bir nesnenin algılanan rengini belirlemek için birlikte çalışır ve genellikle aynı değerlerdir. Örneğin, mavi kristal bir nesneyi işlemek için, yalnızca yayma ve ortam ışığının mavi bileşenini yansıtan bir malzeme oluşturursunuz. Beyaz ışıklı bir odaya yerleştirildiğinde, kristal mavi görünüyor. Ancak, sadece kırmızı ışık bulunan bir odada, aynı kristal siyah görünebilir, çünkü malzemesi kırmızı ışığı yansıtmaz.
Emisyon
Malzemeler, işlenmiş bir nesnenin kendinden parlak görünmesi için kullanılabilir. D3DMATERIAL9 yapısının Yayıcı üyesi, yayılan ışığın rengini ve saydamlığını tanımlamak için kullanılır. Emisyon bir nesnenin rengini etkiler ve örneğin koyu renkli bir malzemeyi daha parlak hale getirir ve yayılan rengin bir kısmını alabilir.
Bir nesnenin ışık yaydığı yanılsamasını eklemek için bir malzemenin izin veren özelliğini kullanabilirsiniz. Bu yanılgı, sahneye ışık eklemenin işlem yüküne neden olmaz. Mavi kristal söz konusu olduğunda, kristalin parıldamasını, ancak sahnedeki diğer nesnelere ışık bırakmamasını istiyorsanız, izin verme özelliği yararlıdır. Hafif özelliklere sahip malzemelerin, bir sahnedeki diğer nesneler tarafından yansıtılabilen ışık yaymadığını unutmayın. Yansıtılan bu ışığı elde etmek için sahnenin içine ek bir ışık yerleştirmeniz gerekir.
Belirtik Yansıma
Belirtik yansıma, nesneler üzerinde vurgular oluşturarak parlak görünmelerini sağlar. D3DMATERIAL9 yapısı, belirtik vurgu rengini ve malzemenin genel parlaklığını açıklayan iki üye içerir. Specular üyesini istenen RGBA rengine ayarlayarak belirli vurguların rengini belirlersiniz- en yaygın renkler beyaz veya açık gridir. Power üyesinde ayarladığınız değerler, belirtik efektlerin ne kadar keskin olduğunu denetler.
Belirtik vurgular çarpıcı efektler oluşturabilir. Mavi kristal benzetmesi üzerine yeniden çizim yapma: Daha büyük bir Güç değeri daha keskin belirtik vurgular oluşturarak kristalin oldukça parlak görünmesine neden olur. Daha küçük değerler efektin alanını artırarak kristalin donuk görünmesini sağlayan donuk bir yansıma oluşturur. Bir nesneyi gerçekten mat hale getirmek için, Güç üyesini sıfır ve Specular rengini siyah olarak ayarlayın. İhtiyaçlarınıza yönelik gerçekçi bir görünüm oluşturmak için farklı yansıma düzeyleriyle denemeler yapın. Aşağıdaki çizimde iki özdeş model gösterilmektedir. Soldaki 10'un yansıma gücünü kullanır; sağdaki modelde herhangi bir yansıma yoktur.
çizimi
Malzeme Özelliklerini Ayarlama
Direct3D işleme cihazları aynı anda bir dizi malzeme özelliğiyle işlenebilir.
C++ uygulamasında, D3DMATERIAL9 bir yapı hazırlayıp IDirect3DDevice9::SetMaterial yöntemini çağırarak sistemin kullandığı malzeme özelliklerini ayarlarsınız.
D3DMATERIAL9 yapısını kullanıma hazırlamak için yapıdaki özellik bilgilerini, işleme sırasında istenen etkiyi oluşturacak şekilde ayarlayın. Aşağıdaki kod örneği, keskin beyaz belirtik vurgulara sahip mor bir malzeme için D3DMATERIAL9 yapısını ayarlar.
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;
D3DMATERIAL9 yapısını hazırladıktan sonra, işleme cihazının IDirect3DDevice9::SetMaterial yöntemini çağırarak özellikleri uygularsınız. Bu yöntem, hazırlanmış bir D3DMATERIAL9 yapısının adresini tek parametresi olarak kabul eder. Cihazın malzeme özelliklerini güncelleştirmek için gereken yeni bilgilerle IDirect3DDevice9::SetMaterial çağırabilirsiniz. Aşağıdaki kod örneği, bunun kodda nasıl görünebileceğini gösterir.
// 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.
}
Bir Direct3D cihazı oluşturduğunuzda, geçerli malzeme otomatik olarak aşağıdaki tabloda gösterilen varsayılan değere ayarlanır.
Üye | Değer |
---|---|
Diffüz | (R:0, G:0, B:0, A:0) |
Aynasal | (R:0, G:0, B:0, A:0) |
Ortam | (R:0, G:0, B:0, A:0) |
İzinli | (R:0, G:0, B:0, A:0) |
Güç | (0.0) |
Malzeme Özelliklerini Alma
İşleme cihazının şu anda kullandığı malzeme özelliklerini, cihaz için IDirect3DDevice9::GetMaterial yöntemini çağırarak alırsınız. IDirect3DDevice9::SetMaterial yönteminden farklı olarak IDirect3DDevice9::GetMaterial için hazırlık gerekmez. IDirect3DDevice9::GetMaterial yöntemi, bir D3DMATERIAL9 yapısının adresini kabul eder ve sağlanan yapıyı geri dönmeden önce geçerli malzeme özelliklerini açıklayan bilgilerle doldurur.
// 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.
}
Not
Uygulamanız işleme için malzeme özelliklerini belirtmiyorsa, sistem varsayılan bir malzeme kullanır. Varsayılan malzeme, ortam veya belirtik yansıma olmadan ve izin verilen renk olmadan tüm dağınık ışığı (örneğin beyaz) yansıtır.
İlgili konular