2015-10-15 37 views
8

Derili bir ağa aktarmaya çalışıyorum. Bazı nedenlerle FbxSDK, bir ağa bir deri kümesi eklediğimde bölümlerin kenarlarındaki normalleri kırıyor. Bir deri olmadan her şey yolunda görünüyor.FbxSDK normalleri keser

Örnek: enter image description here

Kodu: Farklı eşleme mods (. Örn eByPolygonVertex) ve referans mods ama şimdiye kadar hiçbir yardım tryied

FbxLayerElementNormal *layerElementNormal = FbxLayerElementNormal::Create(mesh, ""); 
layerElementNormal->SetMappingMode(FbxLayerElement::eByControlPoint); 
layerElementNormal->SetReferenceMode(FbxLayerElement::eDirect); 

for (int vertIndex = 0; vertIndex < vertexCount; ++vertIndex) 
{ 
    PackedNormal normal = vertices[vertIndex].normal; 
    double x,y,z; 
    x = (((normal.data)  & 0xFF)/127.5f - 1.0f); 
    y = ((((normal.data) >> 8) & 0xFF)/127.5f - 1.0f); 
    z = ((((normal.data) >> 16) & 0xFF)/127.5f - 1.0f); 
    layerElementNormal->GetDirectArray().Add(FbxVector4(x,-y,z)); 
} 

layer->SetNormals(layerElementNormal); 

. Bir örgüde cilt kümeleri varsa, normale tamamen göz ardı edilir gibi görünüyor. Yukarıdaki kodu açıkladım ve tenli model soldaki resimde olduğu gibi görünüyordu.

Ayrıca, dışa aktarılan modeli incelemek için farklı 3d yazılımları (Maya 2015, Maya 2013 ve 3ds Max 2013) denedim ama hepsi aynı sonuçları veriyor.

P.S. Bu problem herhangi bir derili örgüyi etkiler.

DÜZENLEME bu sorun FBX boru hattına bir hata olduğunu görünüyor: Autodesk Forum. Sorunu atlamak için "Özellikleri Aktar" a ihtiyacım var. Bu konuda yardımcı olan var mı?

+2

Resimdeki şey gerçekten düşündüğüm şey mi, yoksa büzülmeyi mi ziyaret etmem gerekiyor? – SergeyA

+0

Tam olarak düşündüğünüz bu! – VenoMKO

+0

Bu iyi. Üzgünüm, asıl soruya yardım edemem. – SergeyA

cevap

0

Kaplama, dört bileşen gerektiren bir işlemdir: x, y, z ve weight. Normal değerler için dördüncü bileşen (ağırlık) sıfıra ayarlanmalıdır. Kodunuza FbxVector4 (x, -y, z, 0) denediniz mi? Ayrıca
w = ((((normal.data) >> 24) & 0xFF)/127.5f - 1.0f);
ve daha sonra FbxVector4 (x, -y, z, w);

+0

Söylemek istediğim şudur: Normal w verilerinin ilk 8 bitini, yararlı w bilgileri içerebilecek şekilde düşürüyorsunuz. –

+0

Cevabınız için teşekkür ederiz. Son bayt kullanılmaz ve 0xFF kaydeder. 4. bileşen olarak 1.0f, 0.0f ve -1.0f geçmeye çalıştı ancak hiçbir şey değişmedi. – VenoMKO