Я делаю приложение визуализации javafx для трехмерных точек. Так как я новичок в JavaFX, я начал из учебника, представленный на сайте оракула:Как улучшить производительность Javafx 3d?
http://docs.oracle.com/javase/8/javafx/graphics-tutorial/javafx-3d-graphics.htm#JFXGR256
В приведенном выше примере работает отлично на моем Mac, но после добавления больше очков, двигайте мышь, которая вызывает камеру чтобы вращать и, следовательно, люди могли просматривать объекты с разных сторон, стали очень медленными и просто неприменимыми.
Я в настоящее время есть данные для кролика с около 40000 точек:
код, я использовал, чтобы вращать камеру:
cameraXform.ry.setAngle(cameraXform.ry.getAngle() - mouseDeltaX * MOUSE_SPEED * modifier * ROTATION_SPEED);
cameraXform.rx.setAngle(cameraXform.rx.getAngle() + mouseDeltaY * MOUSE_SPEED * modifier * ROTATION_SPEED);
который является таким же, как и в примере оракула.
То, что я пробовал:
- набор JVM флаг -Djavafx.animation.fullspeed = правда, это немного помогло, но не имеет существенного значения.
- установить флаг JVM -Djavafx.autoproxy.disable = true, это не помогло.
- установить кэш в true и CacheHint в Cache.SPEED, это не имело большого значения.
- Создайте еще один поток, чтобы сделать поворот и синхронизируйте его после вычисления, это не помогло ни одному.
Любая помощь приветствуется. Спасибо заранее!
Вы не указали столько информации о своем фактическом приложении. Я чувствую, что любое замедление не связано с преобразованием камеры, а в структуру оставшегося графика сцены. Или сказать так: ** Если ** вы отдаете эти 40000 очков как 40000 сфер, то неудивительно, что он становится слишком медленным ... – Marco13
@ Marco13 Спасибо за ваш ответ. Да, я делаю точки в виде сфер, потому что мне нужно установить перемещение мыши для каждой точки, чтобы я мог показать ее координаты, если вы наложите на нее мышь.Можете ли вы дать мне какой-либо совет, чтобы я мог поместить эти трехмерные точки в один узел (если это возможно), и я могу отобразить его координаты (x, y, z), как только я наведу на него мышь? Благодаря! –
Для трехмерной части JavaFX они, очевидно, заимствовали некоторые концепции из Java3D, и там у нас была та же проблема. Я не знаю «хорошего» решения для этого. Можно управлять всей геометрией вручную (в «TriangleMesh») и делать сбор вручную, но это будет означать * значительное * усилие, и это вряд ли возможно здесь. Первая, более простая попытка может заключаться в замене 'Sphere' на 'Box'es: они * намного меньше геометрии, поэтому, вероятно, быстрее, вы вряд ли заметите визуальную разницу на уровне масштабирования, как на скриншоте, и они все еще позволяют мыши-зависанию - просто идея ... – Marco13