Я пытаюсь нарисовать простой куб с помощью вентиляторов треугольника в Open GL ES 3.0. Включение GL_PRIMITIVE_RESTART_FIXED_INDEX
Позвольте мне определить 2 вентилятора, необходимые для рисования куба.Использование GL_PRIMITIVE_RESTART_FIXED_INDEX с Open GL ES 3.0
В результате я получаю ошибку (Fatal сигнал 11 (SIGSEGV), код 2, адр вина 0x74d7e390 в TID 3055 (GLThread 139)) и аварии приложение ...
Чтобы помочь вам найти, где ошибка может быть, я добавляю код, который я использую ниже.
определение куба:
// 4--------7
// -| -|
// - | - |
// 0--------3 |
// | | | |
// | 5-----|--6
// | - | -
// |- |-
// 1--------2
// point 0
coord[0]=-0.5f;
coord[1]=0.5f;
coord[2]=0.5f;
coord[3]=1f;
// point 1
coord[4]=-0.5f;
coord[5]=-0.5f;
coord[6]=0.5f;
coord[7]=1f;
// point 2
coord[8]=0.5f;
coord[9]=-0.5f;
coord[10]=0.5f;
coord[11]=1f;
// point 3
coord[12]=0.5f;
coord[13]=0.5f;
coord[14]=0.5f;
coord[15]=1f;
// point 4
coord[16]=-0.5f;
coord[17]=0.5f;
coord[18]=-0.5f;
coord[19]=1f;
// point 5
coord[20]=-0.5f;
coord[21]=-0.5f;
coord[22]=-0.5f;
coord[23]=1f;
// point 6
coord[24]=0.5f;
coord[25]=-0.5f;
coord[26]=-0.5f;
coord[27]=1f;
// point 7
coord[28]=0.5f;
coord[29]=0.5f;
coord[30]=-0.5f;
coord[31]=1f;
drawingOrder=new short[17];
// first triangle fan : front, top and left faces
drawingOrder[0]=0;
drawingOrder[1]=1;
drawingOrder[2]=2;
drawingOrder[3]=3;
drawingOrder[4]=7;
drawingOrder[5]=4;
drawingOrder[6]=5;
drawingOrder[7]=1;
drawingOrder[8]=-1;
// second triangle fan : bottom, back and right faces
drawingOrder[9]=6;
drawingOrder[10]=2;
drawingOrder[11]=1;
drawingOrder[12]=5;
drawingOrder[13]=4;
drawingOrder[14]=7;
drawingOrder[15]=3;
drawingOrder[16]=2;
Розыгрыш функция:
public void draw(float [] transformMatrix) {
GLES30.glUseProgram(programmeOpenGL);
verticePositionIndex = GLES30.glGetAttribLocation(programmeOpenGL, "positionsSommets");
GLES30.glEnableVertexAttribArray(verticePositionIndex);
GLES30.glVertexAttribPointer(verticePositionIndex , NB_COORDINATES_PER_VERTICE, GLES30.GL_FLOAT, false, verticeMemorySize, verticesList);
verticeColorIndex= GLES30.glGetAttribLocation(programmeOpenGL,"couleursSommets");
GLES30.glEnableVertexAttribArray(verticeColorIndex);
GLES30.glVertexAttribPointer(verticeColorIndex, 4, GLES30.GL_FLOAT, false, 16, colorList);
transformMatrixIndex = GLES30.glGetUniformLocation(programmeOpenGL, "matriceTransformation");
GLES30.glUniformMatrix4fv(transformMatrixIndex , 1, false, transformMatrix, 0);
GLES30.glEnable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX);
GLES30.glDrawElements(GLES30.GL_TRIANGLE_FAN,17,GLES30.GL_UNSIGNED_SHORT,verticesOrderList);
GLES30.glDisable(GLES30.GL_PRIMITIVE_RESTART_FIXED_INDEX);
GLES30.glDisableVertexAttribArray(verticePositionIndex);
GLES30.glDisableVertexAttribArray(verticeColorIndex);
}
Я могу добавить, что если бы я только сделать один вентилятор (первое или второе), она отображается правильно. ..
Есть идеи?
Это идея, которую я только что имел, но это не лучше ... Я добавил код, чтобы помочь вам найти, где проблема на самом деле. – Zelig63
Какова фактическая проблема, с которой вы сталкиваетесь? Кодирование -1, безусловно, является исправлением перезапуска многоугольника, поэтому, если у вас проблемы, это не связано с этим ... – solidpixel
Вот что я подумал, увидев, что ввод -1 не решил проблему, и именно поэтому я добавил свой код в вопрос. Могу добавить, что сохранение только первого треугольника приводит к правильному отображению лица. Добавление второго лица приводит к сбою приложения (ошибка: фатальный сигнал 11 (SIGSEGV), код 2, ошибка addr 0x74d7e3b0 in tid 5585 (GLThread 179)) – Zelig63