我对java 3d引擎中的对象定位没什么问题。
我试图根据物体的中心将我的三维模型放在坐标中心。这意味着,对象的中心位于对象的底部,但不在其高度的中间,就像在java3d中一样。
这是java3d如何做到的:...
我没有声望10 ...我只能发布2个网址...所以有网址horizont view
那就是我需要的:......
object placed in 0,0,0 by the center of it's base
我该怎么做?
我使用此代码:
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 :(得分: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);
Flag ObjectFile.RESIZE表示从文件中加载的对象位于其坐标中心的高度中间,并将对象的大小从原始位置减小或增大到范围x:[ - 1,1]; Y:[ - 1,1]。 Z:[ - 1,1]
但是没有办法知道对象的当前大小,比如宽度或高度......好吧,或者我在google中找不到。