2013-06-07 2 views
0

У меня мало проблем с позиционированием объектов в java 3d engine. Я пытаюсь разместить мою 3d модель в центре координат, используя центр объекта на основе его. Это означает, что центр объекта расположен у основания объекта, но не посередине его высоты, как это сделано в java3d. Вот как java3d делает это: ...
Я не репутацию 10 ... я могу разместить только 2 URLs ... Так что есть гиперссылка horizont view И то, что мне нужно быть: ...
object placed in 0,0,0 by the center of it's basejava 3d позиция объекта

Как я могу это сделать?

Я использует этот код:

TransformGroup tg = this.olib.get_model(model); // Taking my model from lib 
Transform3D transform = new Transform3D(); 
//p.x =0; p.y=0; p.z=0; (center) 
Vector3d vector = new Vector3d(p.x, p.y, p.z); // p is a class x,y,z,yAxis(rotation), scale 
transform.setScale(p.scale); 
Transform3D rotate1 = new Transform3D(); 
rotate1.rotY(p.yAxis); 
transform.mul(rotate1); 
transform.setTranslation(vector); 
tg.setTransform(transform); 
objRoot.addChild(tg); 
+0

Я не уверен на 100%, я понимаю проблему. Вы можете уточнить свой вопрос? – rich

+0

Извините за мой английский .. Мне нужно разместить 3D-объект выше, потому что разработанный центр моего объекта в его основе. Java считает, что центр посередине высоты объекта, потому что объект высок. – user2463226

+0

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

ответ

0

Моя проблема была в неправильном погрузчиком. Вот как я загружен мой объект в 3D сцене:

TransformGroup obj = new TransformGroup(); 
Scene s = null; 
ObjectFile f = new ObjectFile(); 
f.setFlags (ObjectFile.RESIZE | ObjectFile.TRIANGULATE | ObjectFile.STRIPIFY); 
try{ s = f.load (obj_path+model+"\\"+model+".obj"); }catch(Exception ex) { ex.printStackTrace(); } 
obj.addChild(s.getSceneGroup()); 
obj.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); 

Проблема заключается в том, что ряд:

f.setFlags (ObjectFile.RESIZE | ObjectFile.TRIANGULATE | ObjectFile.STRIPIFY); 

Флаг ObjectFile.RESIZE означает, что объект загружается из файла, помещенного в середине это высота центр координат и уменьшить или увеличить размер объекта от его оригинала до диапазона x: [- 1,1]; у: [- 1,1]; г: [- 1,1].

Но нет способа узнать текущий размер объекта, например ширину или высоту ... Ну или я не смог найти в Google.