Я создал поверхность вращения и мне нужно вычислить нормали для каждой вершины, чтобы перейти в мой вершинный шейдер. Я не уверен, где я ошибаюсь:
for(int i = 0, j = 0; i <= c && j <= c; i += 3, j += 9){
GLfloat point[] = {vp1[i], vp1[i + 1], vp1[i + 2], 1.0};
multiply(scale1, point, result);
vp[i] = result[0];
vp[i + 1] = result[1];
vp[i + 2] = result[2];
GLfloat pointC[] = {vp1[j], vp1[j + 1], vp1[j + 2], 1.0};
GLfloat pointA[] = {vp1[j + 3], vp1[j + 4], vp1[j + 5], 1.0};
GLfloat pointB[] = {vp1[j + 6], vp1[j + 7], vp1[j + 8], 1.0};
GLfloat vec1[] = {pointA[0] - pointC[0], pointA[1] - pointC[1], pointA[2] - pointC[2]};
GLfloat vec2[] = {pointB[0] - pointC[0], pointB[1] - pointC[1], pointB[2] - pointC[2]};
crossProd(vec1, vec2, normal);
float mag = sqrt((normal[0]*normal[0]) + (normal[1]*normal[1]) + (normal[2]*normal[2]));
normals[j + 0] = normal[0] / mag;
normals[j + 1] = normal[1] / mag;
normals[j + 2] = normal[2] / mag;
normals[j + 3] = normal[0] / mag;
normals[j + 4] = normal[1] / mag;
normals[j + 5] = normal[2] / mag;
normals[j + 6] = normal[0] / mag;
normals[j + 7] = normal[1] / mag;
normals[j + 8] = normal[2] / mag;
}
Этот код добавляет мои вершины к vp
и затем пытается вычислить нормаль. Моя поверхность определенно не выглядит правильно при рендеринге.
Я думаю, что я создаю нормальную поверхность из всего, что я прочитал до сих пор, но я не уверен, как превратить мой суп из треугольника в нормали вершин.
Редактировать: Для следующего комментария три последовательных индекса составляют 1 очко. 9 последовательных индексов составляют треугольник.
Редактировать 2: Как я могу преобразовать это в нормали для каждой вершины?