LibGDX从使用变换投影矩阵绘制的TextureRegion获取坐标?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LibGDX从使用变换投影矩阵绘制的TextureRegion获取坐标?相关的知识,希望对你有一定的参考价值。

基本上,我的代码是这样的:

我有一个名为cam的正交相机和一个名为batch的精灵批次。

    cam = new OrthographicCamera();
    cam.setToOrtho(true, 136, gameHeight);

    batcher = new SpriteBatch();
    batcher.setProjectionMatrix(cam.combined);

我想要的是在InputProcessor类中创建一个矩形,其具有与使用精灵批处理绘制的纹理区域相同的x,y,宽度和高度,以便我可以触摸检测该纹理。

    batcher.draw(Rock, 30, 30, 80, 25);

但是当我使用“Rock.getTextureRegion.y”或“x”作为我的Bounds矩形的参数时,边界是非常不同的。

是因为投影类中没有投影矩阵吗?我是否需要为该Input类创建一个视口?

或者无论如何分配正确的坐标?

答案

TextureRegion的x,y,width和height参数是它定义它所覆盖的Texture区域的坐标,因此它们与在屏幕上绘制TextureRegion的位置无关。

实际上,TextureRegion对象不包含有关绘制位置的任何数据。当您调用batch.draw(rock, ....)时,批处理将这些坐标传递给OpenGL,但它不会以任何方式修改TextureRegion对象。

你应该做的是创建一个包含与你正在做的事情相关的参数的类。例如:

public class MyButton {
    public TextureRegion textureRegion;
    public float x, y, width, height;
}

然后,您可以为其所有参数设置值,并将其用于使用批处理和输入处理器进行绘制:

batch.draw(myButton.textureRegion, myButton.x, myButton.y, myButton.width, myButton.height);

LibGDX中包含一个名为Sprite的类,它跟踪位置和大小,但我不建议使用它,因为它是TextureRegion的子类,因此它往往会导致糟糕的对象图组织。 (TextureRegion是图形资源,但位置和大小参数不是。)

以上是关于LibGDX从使用变换投影矩阵绘制的TextureRegion获取坐标?的主要内容,如果未能解决你的问题,请参考以下文章

了解 libGDX 投影矩阵

WebGL简易教程:第一个三维示例(使用模型视图投影变换)

(1-2)投影变换

Libgdx fbo 背景透明度

OpenGLES 透视变换与屏幕UV坐标

计算机图形学-MVP变换之投影(Projection)变换