Matris Yığınları (Direct3D 9)
Not
D3DX yardımcı programı kitaplığı kullanım dışıdır. Bunun yerine GitHub'den bu üst bilgiyle birlikte DirectXMath kullanmanızı öneririz.
D3DX yardımcı programı kitaplığı id3DXMATRIXStackarabiriminisağlar. Matrislerin matris yığınına gönderilmesini ve çıkarılabilmesini sağlayan bir mekanizma sağlar. Matris yığını uygulamak, dönüşüm hiyerarşisinde geçiş yaparken matrisleri izlemenin verimli bir yoludur.
D3DX yardımcı programı kitaplığı, dönüştürmeleri matris olarak depolamak için matris yığını kullanır. ID3DXMATRIXStack arabiriminin çeşitli yöntemleri, geçerli matris veya yığının üzerinde bulunan matrisle ilgilenir. geçerli matrisi ID3DXMATRIXStack::LoadIdentity yöntemiyle temizleyebilirsiniz. Geçerli dönüştürme matrisi olarak yüklenecek belirli bir matrisi açıkça belirtmek için ID3DXMATRIXStack::LoadMatrix yöntemini kullanın. Ardından id3DXMATRIXStack::MultMatrixyöntemini veya geçerli matrisi belirtilen matrisle çarpmak için ID3DXMATRIXStack::MultMatrixLocalyöntemini çağırabilirsiniz.
ID3DXMATRIXStack::P op yöntemi önceki dönüştürme matrisine dönmenizi sağlar ve ID3DXMATRIXStack::P ush yöntemi yığına bir dönüştürme matrisi ekler.
Matris yığınındaki tek tek matrisler, D3DX yardımcı program kitaplığı D3DXMATRIX yapısı tarafından tanımlanan 4x4 homojen matrisler olarak temsil edilir.
D3DX yardımcı programı kitaplığı, bileşen nesne modeli (COM) nesnesi aracılığıyla matris yığını sağlar.
Sahne Hiyerarşisi Uygulama
Matris yığını, karmaşık nesnelerin bir dizi basit nesneden oluşturulduğu hiyerarşik modellerin oluşturulmasını kolaylaştırır.
Bir sahne veya dönüşüm hiyerarşisi genellikle ağaç veri yapısıyla temsil edilir. Ağaç veri yapısındaki her düğüm bir matris içerir. Belirli bir matris, düğümün üst öğesinden düğüme koordinat sistemlerindeki değişikliği temsil eder. Örneğin, bir insan kolunu modellediyseniz, aşağıdaki diyagramda gösterilen hiyerarşiyi uygulayabilirsiniz.
İnsan kolu hiyerarşisinin
Bu hiyerarşide, Gövde matrisi gövdeyi dünyaya yerleştirir. UpperArm matrisi omuzun döndürmesini, LowerArm matrisi dirseğin döndürmesini ve El matrisi bileğin döndürmesini içerir. Elin dünyaya göre nerede olduğunu belirlemek için, Gövde'den El'e kadar tüm matrisleri birlikte çarpacaksınız.
Her düğümün yalnızca bir alt öğesi olduğundan önceki hiyerarşi fazla basittir. Eli daha ayrıntılı modellemeye başlarsanız, büyük olasılıkla parmak ve başparmak eklersiniz. Her basamak, aşağıdaki diyagramda gösterildiği gibi hiyerarşiye El alt öğeleri olarak eklenebilir.
İnsan eli hiyerarşisinin
Bir sonraki yola geçmeden önce, kolun tam grafiğini derinlemesine ilk sırada (bir yoldan olabildiğince aşağı doğru) geçirerek sahneyi çizmek için bir kesimli işleme dizisi gerçekleştirirsiniz. Örneğin, el ve parmaklarını işlemek için aşağıdaki deseni uygularsınız.
- El matrisini matris yığınına itin.
- Eli çizin.
- Başparmak matrisini matris yığınına itin.
- Başparmak çizin.
- Başparmak matrisini yığından çıkar.
- Finger 1 matrisini matris yığınına itin.
- İlk parmağınızı çizin.
- Parmak 1 matrisini yığından çıkar.
- Finger 2 matrisini matris yığınına itin. Tüm parmaklar ve başparmak işlenene kadar bu şekilde devam edin.
Parmak işlemeyi tamamladıktan sonra, El matrisini yığından çıkarabilirsiniz.
Aşağıdaki örneklerle kodda bu temel işlemi izleyebilirsiniz. Ağaç veri yapısının derinlik ilk araması sırasında bir düğümle karşılaştığınızda matrisi matris yığınının en üstüne gönderin.
MatrixStack->Push();
MatrixStack->MultMatrix(pNode->matrix);
Bir düğümle işiniz bittiğinde matris yığınının üst kısmından matrisi açın.
MatrixStack->Pop();
Bu şekilde yığının üstündeki matris her zaman geçerli düğümün dünya dönüşümünü temsil eder. Bu nedenle, her düğümü çizmeden önce Direct3D matrisini ayarlamanız gerekir.
pD3DDevice->SetTransform(D3DTS_WORLDMATRIX(0), *MatrixStack->GetTop());
D3DX matris yığınında gerçekleştirebileceğiniz belirli yöntemler hakkında daha fazla bilgi için ID3DXMATRIXStackbaşvuru konusuna bakın.
İlgili konular