簡體   English   中英

Libgdx的Matrix4#translate()無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM