如何在适当的位置扩展ModelInstance

时间:2014-02-26 20:25:58

标签: 3d libgdx transformation

我尝试在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类型的对象?

0 个答案:

没有答案