2012-01-21 3 views
2

Мое требование - создать 3D-график поверхности (также должен отображаться ось x y z) из списка значений точек данных (x y z). 3D-визуализация должна выполняться на ANDROID.Android 3D Surface Plot

Мои данные: В настоящее время планируется использование открытых gl 1.0 и java. Я также рассматриваю Adore3d, min3d и rgl пакет, который использует open gl 1.0. Хорошо в java, но новичок в 3d-программировании.
Временные рамки: 2 месяца

Я хотел бы знать, как лучше всего это сделать? Является ли opengl 1.0 хорошим для 3D-графика? Любые другие пакеты/библиотеки, которые можно использовать с Android?

+0

Добро пожаловать в SO! Ваш вопрос слишком широк и относится к слишком большому числу задач, чтобы запрашивать ответы на качество. Я предлагаю реорганизовать ваш вопрос и сосредоточиться на одной части за раз. –

+0

Привет, justnS, Спасибо. Я перефразировал свой вопрос к конкретной проблеме. –

ответ

1

Ну, вы можете построить поверхность с использованием OpenGL 1.0 или OpenGL 2.0. Все, что вам нужно сделать, это нарисовать оси как линии и нарисовать поверхность как треугольники. Если у вас есть данные heightfield, вы могли бы сделать:

float[][] surface; 
int width, height; // 2D surface data and it's dimensions 

GL.glBegin(GL.GL_LINES); 
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0 
GL.glVertex3f(width, 0, 0); // line ending at width, 0, 0 
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0 
GL.glVertex3f(0, 0, height); // line ending at 0, 0, height 
GL.glVertex3f(0, 0, 0); // line starting at 0, 0, 0 
GL.glVertex3f(0, 50, 0); // line ending at 0, 50, 0 (50 is maximal value in surface[]) 
GL.glEnd(); 
// display the axes 

GL.glBegin(GL.GL_TRIANGLES); 
for(int x = 1; x < width; ++ x) { 
    for(int y = 1; y < height; ++ y) { 
     float a = surface[x - 1][y - 1]; 
     float b = surface[x][y - 1]; 
     float c = surface[x][y]; 
     float d = surface[x - 1][y]; 
     // get four points on the surface (they form a quad) 

     GL.glVertex3f(x - 1, a, y - 1); 
     GL.glVertex3f(x, b, y - 1); 
     GL.glVertex3f(x, c, y); 
     // draw triangle abc 

     GL.glVertex3f(x - 1, a, y - 1); 
     GL.glVertex3f(x, c, y); 
     GL.glVertex3f(x - 1, d, y); 
     // draw triangle acd 
    } 
} 
GL.glEnd(); 
// display the data 

Это рисует простую ось и heightfield, все в белом цвете. Это должно быть довольно просто, чтобы расширить его отсюда.

+0

: Спасибо за вашу помощь. Поскольку я использую java, я попытаюсь преобразовать ваш код и выполнить его. Я вернусь к вам, как только увижу вывод. Спасибо большое. PS: (Не могли бы вы сообщить мне, есть ли у вас java-версия этого фрагмента кода?) –

+0

Ну, это java. Возможно, вам придется заменить «GL» на имя переменной контекста OpenGL (при условии, что вы используете OpenGL ES 1.0). –

+0

Спасибо. Я это попробую! –