Чтобы добавить молнию к кубу OpenGL ES20, мне нужно вычислить нормали для каждой плоскости. Я нашел «учебник» по молнии, но они просто жестко закодировали нормали в кубе, который кажется мне не лучшим вариантом, поскольку он кажется ограниченным?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);
Но это всегда заполнен нулями, а мой кубик остается черным. Как пример, я должен вычислить нормальную матрицу? Должно ли это быть что-то с модельной матрицей? Если да, то где я должен это делать, поскольку единственное место, где они действительно объединены, находится в шейдере? Есть ли другой способ сделать это, что было бы более уместным?
Ваши вершины жестко закодированы, поэтому имеет смысл также жестко кодировать нормали (они не будут меняться больше, чем вершины). Каким образом вы видите это как представляющее какое-то ограничение? – NigelK
Mh да, это правда, я думал иначе, так как я меняю вершины в конструкторе, но я только перемещаю их по ширине, высоте и глубине куба. Я больше думал о «будущем», о более подробных и сложных объектах, таких как полигоны и т. Д. Также я смущен тем, как добавить нормали, жестко закодированные так, как сейчас, особенно с индексами, сколько я нужны и где они должны основываться? EDIT: В примерах, которые я видел, у них было намного больше вершин, определенных без индексов, поэтому я не могу понять, как я должен адаптировать эту часть. – damian
Хорошо, я кое-что пытался. Я думаю, что «жестко закодировать» нормали в нем, я должен изменить способ рисования куба. Я изменил цвета, чтобы определить, какой индекс представляет собой ту часть куба, но меняя все цвета на белый, за исключением одного, что привело к цветному углу, sinde вершина используется более одного раза. Поэтому я не знаю, как я должен добавить нормальную плоскость в реализацию моего куба. – damian