java - Libgdx 的 Matrix4#translate() 无法按预期工作

标签 java opengl matrix libgdx nine-patch

我正在尝试使用变换矩阵绘制一个 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-patch 时得到的结果: 位置 = 0,0/原点 = 0,0/比例 = 0.002/旋转 = 每个 9patch 不同

我得到了我所期望的。

案例2

现在同样的 4 个九补丁: 位置 = 0,0/原点 = 0.5,0.5/比例 = 相同/旋转 = 相同

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

最佳答案

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

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

关于java - Libgdx 的 Matrix4#translate() 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032668/

相关文章:

java - 为什么数组允许使用克隆方法?

java - LWJGL OpenGL黑屏

javascript - 在(CSS-transform)点旋转之前计算坐标

r - 过滤逻辑和对称矩阵

Java - 如何检查字符串中下一个即将出现的空格? (对于 IRC 机器人)

Java 类转换异常 java.awt.geom.Path2D.Double

java - 为什么递归调用下的代码被处理了不止一次(当基本情况为真时)?

无法链接程序,glLinkProgram() 给我 GL_INVALID_OPERATION

c - 究竟什么是图形上下文?

matlab - 如何找到具有负值的索引并将该值替换为最接近的正值索引值?