Память Эффективная реализация угловых сеток в Java3D / OpenGL - PullRequest
2 голосов
/ 25 сентября 2010

Скажем, у меня есть ячейки NX * NY * NZ в сетке угловых точек . У меня также есть маска NX * NY * NZ booleans, которая дает мне, какие ячейки сетки я должен нарисовать.

Я хотел бы создать эффективный индексированный четырехугольный массив в Java3D (или OpenGL, это не имеет значения в конце, поскольку приведенные ниже концепции совпадают), используя как можно меньше памяти.

Ради простоты я пропускаю декларацию нормалей каждого лица, и они мне действительно не нужны, так как я использую плоскую штриховку и нет освещения.

У меня есть цвет для каждой ячейки (это зависит от свойства каждой ячейки).

Таким образом, я перечисляю грани, которые мне нужно нарисовать, основываясь на маске ячеек.

Я повторяю одну и ту же точку (принадлежащую разным лицам) несколько раз, чтобы иметь возможность придать каждому лицу цвет.

Есть ли у вас какие-либо советы о том, как сделать его более эффективным?

1 Ответ

0 голосов
/ 14 июня 2011

У вас есть много вариантов:

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

Другой вариант - нарисовать ваш объект за несколько проходов. Если вам не важна скорость заполнения, вы можете просто нарисовать набор квадов вдоль плоскостей xyz, которые будут напрямую считываться в массив томов.

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

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

Если вам нужно сохранить данные о цвете вместе с вершинами, последнее, что вы можете попробовать, - это сохранить 4 копии каждого цвета вместе с 2 компонентами для координаты каждой вершины в направлении x-z. Чтобы нарисовать весь массив, вы должны сделать 6 проходов, по одному на каждую грань куба. Это можно существенно оптимизировать, обрезая проходы для невидимых граней.

Окончательный выбор курса зависит от объема данных, которые вам нужно нарисовать, типа оборудования, на которое вы ориентируетесь, и от того, сколько работы вы хотите потратить на этот проект.

...