Почему у меня не работает внеэкранный рендеринг Canvas3D?
-
20-09-2019 - |
Вопрос
Я пытался заставить работать рендеринг за кадром, используя Java3D 1.5.2.В моем исходный код Я пытался прикрепить расширенное Canvas3D
который будет выполнять внеэкранный рендеринг SimpleUniverse
, но это нарушит рендеринг:
62. // FOR SOME REASON THIS BREAKS RENDERING
63. universe.getViewer().getView().addCanvas3D(canvas);
Полный исходный код слишком велик для вставки в StackOverflow, поэтому я сделал его доступным через Pastie. здесь.
Строка 63 закомментирована, и обычный Canvas3D выполняет рендеринг на экране.Он отрендерит куб и отобразит его в JFrame
.Однако если вы удалите комментарий, рендеринг за кадром приведет к тому, что рендеринг на экране не будет отображаться.Кроме того, рендеринг за кадром вернет «большое черное ничто». BufferedImage
.
Я хотел бы знать, как заставить работать внеэкранный рендеринг, т.е.визуализировать сцену повернутого куба в буферизованное изображение.Я просматривал предоставленный Java3D пример кода для рендеринга за кадром, и они тоже делают это (за исключением того, что они используют Raster
объект для рендеринга закадрового буфера обратно в экранное окно).
Решение
Возможно, физический размер Screen3D неправильный.Предполагается, что значение равно размеру физического экрана в метрах.Вы можете протестировать с помощью:
screen3D.setPhysicalScreenWidth(0.0254/90.0 * destWidth);
screen3D.setPhysicalScreenHeight(0.0254/90.0 * destHeight);
Значения взяты из верхней части javadoc Screen3D.Проблемная строка работала вместе с приведенным выше кодом, по крайней мере для меня :)
Установка неправильного физического размера также может изменить соотношение сторон визуализированного изображения.