2016-02-08 4 views
1

Я новичок в 3d-моделировании JavaFx. Я пытаюсь создать 3d-модель ящиков в комнате. У меня есть размеры ящиков и коордов из переднего левого нижнего угла каждой коробки. Я попытался установить координаты с setTranslateX(), но результат неверен. Вот пайса моего кода, где я пытаюсь установить COORDS:Позиционирование 3d-ящиков в JavaFx

for (int i = 0; i < Main.load.size(); i++) { 
     Load l=Main.load.get(i); 
     Box sphere = new Box(l.getLength()*10, l.getWidth()*10, l.getHeight()*10); 
     sphere.setTranslateX(l.getX()*10); 
     sphere.setTranslateY(l.getY()*10); 
     sphere.setTranslateZ(l.getZ()*10); 
     PhongMaterial m = new PhongMaterial(); 
     m.setDiffuseColor(new Color(Math.random(),Math.random(),Math.random(),1)); 
     m.setSpecularColor(Color.BLACK); 
     sphere.setMaterial(m); 
     root.getChildren().add(sphere); 
    } 

Я надеюсь, что кто-то может мне помочь.

Вот пример:

Размеры: синий (30,50,50) розовый (10,10,20)

Должность: синий (0,0,0) розовый (30,0,0)

And this is what I get

+0

Не могли бы вы описать эффект, который вы видите? Какую версию Java вы используете? Установили ли вы глубину глубины 3D-подсети true с помощью конструктора? – Birdasaur

+1

@Birdasaur Я обновил вопрос на примере. Я использую Java 8. Значение depthBuffer истинно. Спасибо за вашу помощь! – holzfeli

+0

Кажется, что ваши объекты переведены точно там, где они должны предполагать, что камера, которую вы используете, является PerspectiveCamera. PerspectiveCamera использует 3D-начало координат (0,0,0) в центре 3D-сцены. Это то, что вы хотите, или ваши значения позиции, ожидающие, что один из «углов» станет источником? – Birdasaur

ответ

0

Когда вы делаете перевод в JavaFX 3D объекта, как Box вам нужно учитывать половину ширины объекта вдоль любой оси. Размещение по умолчанию для ящика должно быть центрировано в начале координат, что означает, что центр объекта Box равен 0,0,0. Ваша ширина 30 * 10, но ваш перевод X преобразуется в 0 * 10 = 0. Таким образом, самый правый край вашей синей коробки будет X = 150 (300/2.0 = 150). У вашей Pink Box есть перевод 10 из 10 * 30 = 300. Центр розовой коробки будет переведен на 300, что означает, что левый край будет составлять 300 - (ширина/2,0) = 300 - (50) = 250.

Смежные вопросы