Как рассчитать на каждую вершину нормали для сгенерированной геометрии? OpenGL - PullRequest
0 голосов
/ 15 апреля 2020

Я создал поверхность вращения и мне нужно вычислить нормали для каждой вершины, чтобы перейти в мой вершинный шейдер. Я не уверен, где я ошибаюсь:

    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: Как я могу преобразовать это в нормали для каждой вершины?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...