Merge pull request #1210 from rmitton/sib-normals
Fix for faceted normals in SIB filespull/1214/head
commit
eb8b00617a
|
@ -391,7 +391,7 @@ static void ConnectFaces(SIBMesh* mesh)
|
||||||
// with non-2-manifold surfaces, but then so does Silo to begin with.
|
// with non-2-manifold surfaces, but then so does Silo to begin with.
|
||||||
if (edge.faceA == 0xffffffff)
|
if (edge.faceA == 0xffffffff)
|
||||||
edge.faceA = static_cast<uint32_t>(faceIdx);
|
edge.faceA = static_cast<uint32_t>(faceIdx);
|
||||||
else
|
else if (edge.faceB == 0xffffffff)
|
||||||
edge.faceB = static_cast<uint32_t>(faceIdx);
|
edge.faceB = static_cast<uint32_t>(faceIdx);
|
||||||
|
|
||||||
prev = next;
|
prev = next;
|
||||||
|
@ -435,12 +435,17 @@ static aiVector3D CalculateVertexNormal(SIBMesh* mesh, uint32_t faceIdx, uint32_
|
||||||
{
|
{
|
||||||
SIBEdge& edge = GetEdge(mesh, posA, posB);
|
SIBEdge& edge = GetEdge(mesh, posA, posB);
|
||||||
|
|
||||||
// Move to whichever side we didn't just come from.
|
// Non-manifold meshes can produce faces which share
|
||||||
if (!edge.creased) {
|
// positions but have no edge entry, so check it.
|
||||||
if (edge.faceA != prevFaceIdx && edge.faceA != faceIdx)
|
if (edge.faceA == faceIdx || edge.faceB == faceIdx)
|
||||||
nextFaceIdx = edge.faceA;
|
{
|
||||||
else if (edge.faceB != prevFaceIdx && edge.faceB != faceIdx)
|
// Move to whichever side we didn't just come from.
|
||||||
nextFaceIdx = edge.faceB;
|
if (!edge.creased) {
|
||||||
|
if (edge.faceA != prevFaceIdx && edge.faceA != faceIdx && edge.faceA != 0xffffffff)
|
||||||
|
nextFaceIdx = edge.faceA;
|
||||||
|
else if (edge.faceB != prevFaceIdx && edge.faceB != faceIdx && edge.faceB != 0xffffffff)
|
||||||
|
nextFaceIdx = edge.faceB;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue