[英]Libgdx's Matrix4#translate() doesn't work as expected
我試圖使用變換矩陣繪制NinePatch
以便可以縮放,旋轉,移動等。因此,我創建了一個繼承自LibGDX的NinePatch
類的類,該類負責該矩陣。
這就是我計算變換矩陣的方式(每次以下值之一更改時,我都會對其進行更新):
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 /旋轉=每個9個色塊均不同
我得到了我所期望的。
情況二
現在相同的四個九個面片具有:位置= 0,0 /原點= 0.5,0.5 /比例=相同/旋轉=相同
您可以看到我的9個色塊不是在0,0(它們的位置)繪制的,而是在0.5,0.5(它們的原點) .translate(-originX, -originY, 0)
在計算變換矩陣時沒有.translate(-originX, -originY, 0)
。 可以肯定的是,我評論了此指令,並且確實得到了相同的結果。 那么,為什么顯然沒有考慮我的第二次翻譯?
問題可能出在您的擴展上。 由於它還會縮小轉換,因此您的第二個轉換實際上會轉換(-originX*scale, -originY*scale, 0)
因為scale = 0.002,看來根本沒有任何轉換。 例如,對於x坐標,您可以計算:
x_final = originX + scale * (-originX + x_initial)
我不得不更改計算轉換矩陣的代碼,以按照Guillaume G的指示進行轉換時要考慮縮放比例,但我的代碼與他的代碼不同:
this.transform
.idt()
.translate(originX, originY, 0)
.rotate(0, 0, 1, rotation)
.scale(scale, scale, 1)
.translate(-originX / scale, -originY / scale, 0);
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.