Нормали некоторых объектов высчитываются вывернутыми, а другие - нет

Пишу свой 3D-движок и столкнулся с проблемой, почему нормали моделей могут быть вывернуты... Проверял в Blender-е, а там пишет, что все нормально. Думаю, что проблема в том, как они высчитываются.

Цвета фигуры - нормали, так же добавил линии в сторону направления нормали.

std::vector<ne::Math3D::Vector3> Vertices;
ne::Math3D::Vector3 NVertices[3];


for (int j = 0; j < 3; j++)
{
    const ne::Math4D::Vector4 FirstCurrentVertex = Target.getStatic() ? CurrentFace.vertices[j] : getFirstResultVertex(CurrentFace.vertices[j], Target);

    NVertices[j] = FirstCurrentVertex;

    Vertices.push_back(MainCamera.getCameraMatrix() * FirstCurrentVertex);
}

Vertices = clip(Vertices, ne::Plane(ne::Math3D::Vector3(0.f, 0.f, -1.f), MainCamera.zNear));

if (Vertices.size() > 2)
{
    ne::Object::Mesh::FaceInf Result;
    for (int i = 0; i < Vertices.size(); i++)
    {
        ne::Math3D::Vector3 CurrentVertex = getSecondResultVertex(Vertices[i], MainCamera, MainWindow);

        Result.centerZ += Vertices[i].z;
        Result.centerX += Vertices[i].x;
        Result.centerY += Vertices[i].y;
        Result.vertices.push_back(CurrentVertex);
    }

    Result.centerZ /= Vertices.size();
    Result.centerX /= Vertices.size();
    Result.centerY /= Vertices.size();

    Result.faceMaterial = &Target.material;

    ne::Math3D::Vector3 normal = (NVertices[0] - NVertices[1]).cross(NVertices[0] - NVertices[2]).normalize();

    Result.faceNormal = normal;
    float normalDotCamera = normal.dot((MainCamera.getResultTransform().forward() ).normalize());
                
    if (normalDotCamera < 0.f && Target.getInvertedNormals() || normalDotCamera > 0.f && !Target.getInvertedNormals())
    {
        ObjectsVector.push_back(Result);
    }
}

Результат


Ответы (1 шт):

Автор решения: TrASH

Оказалось, что неправильным был не алгоритм, а модель пешки... Даже Unity отображал ее так же, как и мой движок.

→ Ссылка