Экспорт 3d-модели, созданной в sketchup, для использования в Android - PullRequest
0 голосов
/ 27 октября 2011

У меня проблема с использованием OpenGL на Android для рисования простого прямоугольника. Это то, что я сделал.

Я нарисовал простой прямоугольник с SketchUp. Я экспортировал результат, используя 3d-модель файла collada .dae. Затем я скопировал данные вершин из файл .dae (xml) и поместить в массив. Я скопировал массив на родной отформатировать в плавающий буфер. Затем я нарисовал треугольники с помощью полосы Режим. Результат почти прямоугольник. Отсутствует треугольник на каждая поверхность.

Вот соответствующая часть кода и результат.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    // Enable color tracking
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    for (int i=0; i<108/4; i=i+4) {
        myDrawColor(gl,i);
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,i,4);// mode, first, count
    }
}

результат показан здесь http://imgur.com/a/o3HTP

Ответы [ 2 ]

1 голос
/ 27 октября 2011

Возможно, у вас вершины в неправильном порядке в вашем списке вершин (что может быть ошибкой экспорта). Это то, что я получил от своих четырехугольников, когда у меня были вершины в неправильных местах. Вы хотите построить их против часовой стрелки снаружи. Также может быть, что треугольная полоса вызывает проблемы с вашими вершинами, для такого простого приложения вы можете попробовать GL_QUADS.

0 голосов
/ 28 октября 2011

Я получил работающий код.Было три проблемы.

  1. DrawArrays работает вперед через массив вершин.то есть.вы рисуете один элемент из массива за раз, а затем переходите к следующему.Вы не можете перескакивать туда-сюда.
  2. Используя список смещений в XML-файле, я создал массив, который мог бы использовать с glDrawElements, где он перемещается в списке вершин.Вам необходимо использовать unsigned short со смещением.Я использовал целое число и исправил, который не работал.

Вот результат, который работает.Проблема была моей.Не XML-файл, созданный в SketchUp.

public void draw(GL10 gl) {
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
    gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorsBuffer);
    gl.glEnable(GL10.GL_COLOR_MATERIAL); 
// Enable color tracking 
    gl.glEnable(GL10.GL_COLOR_MATERIAL);
    gl.glDrawElements(GL10.GL_TRIANGLES, myoffsets.length, GL10.GL_UNSIGNED_SHORT, mIndicesBuffer); // mode, count, type, indices
}
...