JavaFx 3D — отображение большого количества треугольных сеток

Я пытаюсь найти лучший способ отобразить сцену, состоящую примерно из 150 тыс. TriangleMesh. Это нижний предел того, что мне нужно отображать. В настоящее время FPS недопустимо низкий. Существуют ли какие-либо встроенные методы отбраковки (кроме setCullFace()), которые я потенциально мог бы использовать?


person Chris    schedule 21.12.2016    source источник
comment
Вопрос очень широкий и звучит как общий вопрос об эффективном рендеринге, на который вряд ли можно ответить здесь, даже если он, по-видимому, сужен до JavaFX. Я думаю, что один важный вопрос заключается в том, о каком виде экземпляров TriangleMesh вы говорите (т.е. сколько треугольников содержит каждый из них?). Но независимо от этого: даже сложные библиотеки рендеринга могут достичь предела, когда сложность сцены (то есть количество объектов) становится слишком большой. Могут быть решения (например, объединение сеток в одну), но они могут потребовать значительных усилий.   -  person Marco13    schedule 21.12.2016
comment
Я понимаю, что это определенно широкая тема, но я не могу найти ничего, кроме основ JavaFx 3D. Каждый из этих 100 тысяч или около того элементов визуализируется с 12 треугольными гранями (близкими к кубу). Мне также нужно иметь возможность взаимодействовать с каждым из них отдельно. Я не уверен, как выяснить, какие из них находятся ближе всего к камере, а какие вне поля зрения, не вызывая при этом серьезного снижения производительности.   -  person Chris    schedule 21.12.2016
comment
Вероятно, трудно (и может почти невозможно) добиться хорошей производительности для 150 000 различных объектов с помощью высокоуровневого графического API, такого как JavaFX. Есть и другие соответствующие вопросы: что вы имеете в виду под моим взаимодействием с ними? И: у них разные материалы? Есть и другие вопросы, которые этот можно считать дубликатом (stackoverflow.com/q/31619781, stackoverflow.com/q/23749614 ... вы, вероятно, уже нашли их, и, по общему признанию, у них нет действительно удовлетворительных тоже отвечает...)   -  person Marco13    schedule 22.12.2016
comment
Извините за поздний ответ. И да, я полагал, что это почти невозможно, и единственный способ, которым это сработает, - это какой-нибудь хитрый трюк. Я могу сделать все точки в одну сетку. Однако мне нужно выбрать часть сетки и скрыть ее, поэтому для достижения этого с сеткой из 150 тыс. вершин потребовались бы интенсивные вычисления. Что касается других постов, да, я видел их, и в них не было ничего действительно полезного для меня, но спасибо!   -  person Chris    schedule 22.12.2016
comment
Вы также могли видеть мои комментарии в других вопросах. Я действительно хотел бы дать здесь полезный совет. Много лет назад я немного поиграл с Java3D, и части JavaFX 3D, похоже, многое унаследовали от Java3D, по крайней мере, концептуально. Java3D допускал более детальное управление (например, компиляцию части графа сцены, оптимизацию тех частей, которые больше не должны были изменяться (структурно). Теперь можно попробовать сгруппировать или сгруппировать сетки. Грубо: используйте не 150k*12 лиц, а 1,5k*1200 лиц. Но это также может потребовать значительных усилий/реструктуризации...   -  person Marco13    schedule 22.12.2016
comment
Вот хорошее приложение, которое может помочь проанализировать возможности JavaFX на вашем оборудовании. 1,5k * 1200 лиц должно быть легко выполнимо на приличной видеокарте. (Проверено на моем 4-летнем MacBook Pro) interactivemesh.org/models/jfx3dtuxcube.html   -  person mipa    schedule 22.12.2016