Я пытаюсь добавить освещение к многоугольнику, созданному из файла многоугольника. Моя проблема заключается в том, что при создании векторов из точек я получаю только определенный участок многоугольников, а затем, если я инвертирую вычисление для нормалей, (от A.x - C.x до C.x - A.x), он загорается секцией, которая ранее не была освещена. Код и рисунки ниже.Вычисление OpenGL Face Normalals of Polygon
h_vector V1;//= (p2 - p1);
// A = 0 B = 1 C = 2 D =3
V1.x = vertices[1].x - vertices[0].x;
V1.y = vertices[1].y - vertices[0].y;
V1.z = vertices[1].z - vertices[0].z;
h_vector V2;// = (p3 - p1);
V2.x = vertices[3].x - vertices[0].x;
V2.y = vertices[3].y - vertices[0].y;
V2.z = vertices[3].z - vertices[0].z;
/*
h_vector V1;//= (p2 - p1);
V1.x = vertices[0].x - vertices[1].x;
V1.y = vertices[0].y - vertices[1].y;
V1.z = vertices[0].z - vertices[1].z;
h_vector V2;// = (p3 - p1);
V2.x = vertices[0].x - vertices[3].x;
V2.y = vertices[0].y - vertices[3].y;
V2.z = vertices[0].z - vertices[3].z;
*/
surfaceNormal.x = (V1.y*V2.z) - (V1.z-V2.y);
surfaceNormal.y = - ((V2.z * V1.x) - (V2.x * V1.z));
surfaceNormal.z = (V1.x-V2.y) - (V1.y-V2.x);
float normalize = sqrtf((pow(surfaceNormal.x,2) + pow(surfaceNormal.y,2) + pow(surfaceNormal.z,2)));
surfaceNormal.x = surfaceNormal.x/normalize;
surfaceNormal.y = surfaceNormal.y/normalize;
surfaceNormal.z = surfaceNormal.z/normalize;
Проблема, похоже, устраняет лицо, а не нормали, но перед тем, как завершить, нужно увидеть остальную часть кода. Не имеет значения, но нормальная калькуляция может быть выполнена гораздо проще. – elimad