2015-06-24 39 views
0

我想绘制一个NinePatch使用转换矩阵,因此它可以缩放,旋转,移动等所以我创建了一个继承自LibGDX的NinePatch类和这是矩阵的责任。Libgdx的Matrix4#translate()不能正常工作

我这是怎么计算我的变换矩阵(我每次下列值的变化之一更新):

this.transform 
    .idt() 
    .translate(originX, originY, 0) 
    .rotate(0, 0, 1, rotation) 
    .scale(scale, scale, 1) 
    .translate(-originX, -originY, 0) 
; 

,我该如何使我的自定义NinePatch类:

drawConfig.begin(Mode.BATCH); 
this.oldTransform.set(drawConfig.getTransformMatrix()); 
drawConfig.setTransformMatrix(this.transform); 
this.draw(drawConfig.getBatch(), this.x, this.y, this.width, this.height); // Libgdx's NinePatch#draw() 
drawConfig.setTransformMatrix(this.oldTransform); 

案例1

下面是我在渲染4个9个补丁时得到的结果: 位置= 0,0 /原点= 0,0 /缩放= 0.002 /旋转=每个9patch

我得到了我期望不同。

案例2

现在相同的4组9的斑块: 位置= 0,0 /产地= 0.5,0.5 /缩放=相同/旋转=相同

你可以看到我的9个补丁不是在0,0(他们的位置)上绘制的,而是在0.5,0.5(它们的原点),就像我在计算变换矩阵时没有.translate(-originX, -originY, 0)一样。可以肯定的是,我评论了这一指导,并且我确实得到了同样的结果。那么为什么我的第二次翻译显然不被考虑?

回答

0

我不得不改变代码我计算变换矩阵转换回来纪尧姆G.除了我的代码,指出时采取的规模考虑不同于他的:

this.transform 
    .idt() 
    .translate(originX, originY, 0) 
    .rotate(0, 0, 1, rotation) 
    .scale(scale, scale, 1) 
    .translate(-originX/scale, -originY/scale, 0); 
; 
1

问题可能是你的缩放。因为它也缩小了翻译的范围,所以您的第二次翻译实际上翻译了(-originX*scale, -originY*scale, 0),因为scale = 0.002,看起来根本没有翻译。对于协调实例的X,你计算:

x_final = originX + scale * (-originX + x_initial) 
+0

你是对的,除了我必须写一个不同的代码。 – Flawyte