我尝试在libgdx中缩放ModelInstance类型的对象,这样它就不会改变它的位置,只会缩放。 根据我的理解,我必须将它移动到原点,在那里缩放,然后将其移回原位。
这是我的代码
Vector3 tmp;
curInstance.transform.getTranslation(tmp);
curInstance.transform.translate(-tmp.x, -tmp.y, -tmp.z);
curInstance.transform.scale(scalingFactor, scalingFactor, scalingFactor);
curInstance.transform.translate(tmp);
curInstance.calculateTransforms();
显然是这条线
curInstance.transform.getTranslation(tmp);
没有做我期望它做的事情,即从原点检索当前位置/偏移量。 tmp
在(0, 0, 0)
之后停留for (Mesh m : instance.model.meshes) {m.scale(...)}
。
我得到的是物体缩放,但在缩小时也会向中心移动,或者在缩放时移向中心。
另一个问题是,当我以这种方式应用缩放时,光照是错误的,就像一些法线无效一样。但它看起来很好,如果我像
mesh = new Mesh(true,faceIndices.length*3, altindices.length*3, new VertexAttribute(VertexAttributes.Usage.Position, 3, "a_position"), new VertexAttribute(VertexAttributes.Usage.Normal,3, "a_normal"));`,
除了它们相对于世界的原点进行缩放。
我像这样初始化网格
modelBuilder.begin();
modelBuilder.part("mesh", mesh, GL10.GL_TRIANGLES, new Material(ColorAttribute.createDiffuse(Color.DARK_GRAY)));
instance = modelBuilder.end();`
然后计算顶点坐标,然后执行
{{1}}
所以我的问题是:在libgdx中,我如何扩展ModelInstance类型的对象?