Как рисовать линии сетки в OpenGL ES Android? - PullRequest
4 голосов
/ 06 марта 2011

Я хочу нарисовать сетку 10 на 10, которая определяет наземную плоскость так, что центр является источником мировых координат.Это код, который вызывается для каждой строки, определенной в сетке.

gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVerticesBuffer);

gl.glTranslatef(x, y, z);
gl.glRotatef(rz, 0, 0, 1);
gl.glRotatef(rx, 1, 0, 0);
gl.glRotatef(ry, 0, 1, 0);

gl.glDrawArrays(GL10.GL_LINES, 0, 2);

gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);

Проблема в том, что я вижу только одну горизонтальную линию.Так что я думаю что-то не так.

Этот код определяет строки:

Line line;

for (int i = 0; i <= 10; i++) {
    // horizontal lines
    line =  new Line(-50, 0, 0, 50, 0, 0, 0, 0, 1, 1);  // blue line
    line.z = (i * 100) - 50;
    lines.add(line);

    // draw perspective lines
    line =  new Line(-50, 0, 0, 50, 0, 0, 0, 0, 1, 1);  // blue line
    line.x = (i * 100) - 50;
    line.ry = 90; 
    lines.add(line);
}

Для каждой строки в наборе линий я вызываю код рисования в onDrawFrame.

Ответы [ 2 ]

3 голосов
/ 06 марта 2011

Причина в том, что вы рисуете только одну линию.В основном glDrawArrays рисует примитивы opengl на основе данных.Поэтому glDrawArrays один раз отрисовывает координаты в вашем буфере mVerticesBuffer.

Простой способ сделать то, что вы хотите:1007 * Нарисуйте свою первую строку с помощью glDrawArrays ();

Используйте gl.glTranslatef (somenumber, 0, 0); Снова отрисуйте с тем же вызовом glDrawArrays (); Используйте gl.glRotatef (90, 0, 1, 0);вращаться вокруг оси y (или независимо от того, на какой оси вы находитесь в 0) (возможно перевести обратно на ось, чтобы попасть в ту же начальную позицию) Выполнить 2-е, 3-е и 4-еОпять пуля.

Гораздо более аккуратный и эффективный способ сделать это - использовать матрицы нажатия и выталкивания, но для простоты это должно сработать, если вы новичок в opengl.

1 голос
/ 02 января 2012

Решение, данное вам, кажется хорошим и должно работать для решения ваших проблем.Вероятно, лучшее решение состоит в том, чтобы создать вершины один раз и сохранить их в файле, вы можете прочитать файл один раз и визуализировать сетку за один раз, что было бы намного лучше с точки зрения производительности и скорости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...