Я начал с этого урока для начинающих (http://www.opengl-tutorial.org/beginners-tutorials/tutorial-4-a-colored-cube/): ...
static const GLfloat g_vertex_buffer_data[] = {
-1.0f,-1.0f,-1.0f, // triangle 1 : begin
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f, // triangle 1 : end
1.0f, 1.0f,-1.0f, // triangle 2 : begin
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f, // triangle 2 : end
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};
И применил DrawArray: GLES20.GL_TRIANGLE_FAN, чтобы получить штриховку, а затем DrawArray : GLES20.GL_LINES для ребер куба. Но в дополнение к искажениям глубины, упомянутым в руководстве, он также рисовал диагонали кое-где, чтобы исказить внешний вид куба. Я изменил последовательность таким образом (вы можете изменить все коэффициенты обратно на 1.0f, чтобы вернуть форму куба):
// [01] +XY face elev front
.7f, 1.4f, -0.1f, //2: ele front top right
.7f, -1.4f, -0.1f, //1: ele front bottom right
.7f, -1.4f, -0.1f, //1: ele front bottom right
-.7f, -1.4f, -0.1f, //0: ele front bottom left
-.7f, 1.4f, -0.1f, //3: ele front top left
.7f, 1.4f, -0.1f, //2: ele front top right
// [02] +ZX face pln top
.7f, 1.4f, -0.1f, //2: pln top bot right
-.7f, 1.4f, -0.1f, //3: pln top top left
-.7f, 1.4f, 0.1f, //5: pln top bot left
-.7f, 1.4f, 0.1f, //5: pln top bot left
.7f, 1.4f, 0.1f, //4: pln top bot right
.7f, 1.4f, -0.1f, //2: pln top bot right
// [03] +YZ face elevn rght
.7f, 1.4f, -0.1f, //2: ele rgt top left
.7f, 1.4f, 0.1f, //4: ele rgt top right
.7f, -1.4f, 0.1f, //7: ele rgt bot right
.7f, -1.4f, 0.1f, //7: ele rgt bot right
.7f, -1.4f, -0.1f, //1: ele rgt bot left
.7f, 1.4f, -0.1f, //2: ele rgt top left
// [04] -YZ face ele left
-.7f, -1.4f, 0.1f, //6: ele lft bot right
-.7f, 1.4f, 0.1f, //5: ele lft bot left
-.7f, -1.4f, -0.1f, //0: ele lft top right
-.7f, 1.4f, -0.1f, //3: ele lft top left
-.7f, 1.4f, 0.1f, //5: ele lft bot left
// [05] -XY face ele back
-.7f, -1.4f, 0.1f, //6: ele back bot right
-.7f, 1.4f, 0.1f, //5: ele back top right
.7f, 1.4f, 0.1f, //4: ele back top left
.7f, 1.4f, 0.1f, //4: ele back top left
.7f, -1.4f, 0.1f, //7: ele back bot left
-.7f, -1.4f, 0.1f, //6: ele back bot right
// [06] -ZX face plan bot
-.7f, -1.4f, 0.1f, //6: plan bot back left
-.7f, -1.4f, -0.1f, //0: plan bot front left
.7f, -1.4f, -0.1f, //1: plan bot front right
.7f, -1.4f, -0.1f, //1: plan bot front right
.7f, -1.4f, 0.1f, //7: plan bot back right
-.7f, -1.4f, 0.1f, //6: plan bot back left
И получил только линии ребер, но они были неполными, поэтому после ряда испытаний и обойти ошибки, удалось получить эффект прозрачного каркаса, добавив к этой измененной последовательности следующие дополнительные треугольники:
// Cross-Over from front to back views
.7f, -1.4f, 0.1f, //7: plan bot back right
.7f, -1.4f, -0.1f, //1: plan bot front right
-.7f, -1.4f, -0.1f, //0: plan bot front left
-.7f, -1.4f, -0.1f, //0: plan bot front left
-.7f, -1.4f, 0.1f, //6: ele back bot right
.7f, -1.4f, 0.1f, //7: plan bot back right
.7f, -1.4f, 0.1f, //7: ele back bot left
.7f, 1.4f, 0.1f, //4: ele back top left
.7f, 1.4f, -0.1f, //2: ele rgt top left
.7f, 1.4f, -0.1f, //2: ele rgt top left
-.7f, 1.4f, -0.1f, //3: pln top top left
-.7f, 1.4f, 0.1f, //5: pln top bot left
-.7f, 1.4f, -0.1f, //3: pln top top left
.7f, 1.4f, -0.1f, //2: ele rgt top left
В конечных комментариях действительны только метки вершин. Для визуализации В соответствии с настройками моих аннотаций восемь вершин грани нумеруются от начальной грани главной грани 0: (-1, -1, -1) против часовой стрелки, а начальная вершина 4 противоположной грани: (1, 1, 1) также против часовой стрелки, обращенной к положительному Z.
Эта последовательность дала четкий каркасный след куба, в отличие от непрозрачного эффекта solid с использованием GLES20.glEnable: GL_DEPTH_TEST с GLES20.glDepthFun c: GL_LESS.
Стоит упомянуть дополнительные наблюдения, (1): фильтр проверки глубины уничтожил плоские формы, которые были в непосредственной близости от куб, и (2): без пяти дополнительных конечных треугольников исключение теста глубины обнажило диагонали на непрозрачных передних гранях (не в начальном рендере, чувствительном к глубине, но после поворота, который изменил последовательность порядка глубины).
Моя последовательность вершин каркаса больше похожа на иголку в стоге сена. Кто-нибудь может объяснить это более предсказуемым образом? С другой стороны, есть ли способ непосредственно нарисовать куб из каркасной конструкции, повторно используя последовательность вершин без дополнительных треугольников? (Самое большее, что я знаю на данный момент, это то, что начало дополнительных линий треугольника должно было быть достигнуто путем отвода вдоль письменных ребер вместо того, чтобы переходить непосредственно к ним, чтобы вызвать дополнительные нежелательные диагонали.)
Заранее спасибо (TIA )