Чтобы добавить молнии в мой куб OpenGL ES20, мне нужно рассчитать нормали для каждой плоскости. Я нашел «учебник» по молнии, но они просто жестко запрограммировали нормали в куб, что мне кажется не лучшим вариантом, поскольку кажется ограниченным?
Итак, мой подход к кубу следующий:
private float[] mVertices = {
-1, -1, -1, // bottom left
1, -1, -1, // bottom right back
1, 1, -1, // top right
-1, 1, -1, // top left
-1, -1, 1, // bottom left
1, -1, 1, // bottom right front
1, 1, 1, // top right
-1, 1, 1 // top left
};
private float[] mColors = {
0.6f, 0f, 0.6f,
0.6f, 0f, 0.6f,
0.6f, 0f, 0.6f,
0.6f, 0f, 0.6f,
0.8f, 0f, 0.6f,
0.8f, 0f, 0.6f,
0.8f, 0f, 0.6f,
0.8f, 0f, 0.6f
};
private float[] mNormal = new float[?]; ?
private short[] mIndices = {
0, 4, 5,
0, 5, 1,
1, 5, 6,
1, 6, 2,
2, 6, 7,
2, 7, 3,
3, 7, 4,
3, 4, 0,
4, 7, 6,
4, 6, 5,
3, 0, 1,
3, 1, 2
};
то есть у меня определены все 8 вершин, а также индексы того, как объединить их в треугольники. Чтобы получить нормальную матрицу, я читал, что должен инвертировать матрицу, а затем транспонировать ее. Итак, я пробовал это:
float[] mTempMatrix = new float[mVertices.length];
Matrix.invertM(mTempMatrix, 0, mVertices, 0);
Matrix.transposeM(mNormal, 0, mTempMatrix, 0);
Но это всегда заполнено нулями, и мой куб остается черным. Как, например, я должен вычислить нормальную матрицу? Должно быть что-то с матрицей модели? Если да, то где я должен это сделать, поскольку единственное место, где они действительно объединяются, находится в шейдере? Есть ли другой способ сделать это, который был бы более подходящим?