当前位置: 首页 > 知识库问答 >
问题:

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

陶智
2023-03-14

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

我有一个名为cam的正交相机和一个名为batch的sprite批处理。

    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矩形的参数时,边界就大不相同了。

是因为那个输入类中没有projectionMatrix吗?我需要为那个输入类创建一个视口吗?

还是无论如何都要分配正确的坐标?

共有1个答案

楚洋
2023-03-14

纹理区域的x、y、宽度和高度参数是它的坐标,定义了它所覆盖的纹理区域,因此它们与纹理区域在屏幕上的绘制位置没有任何关系。

事实上,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 的类,它确实可以跟踪位置和大小,但我不建议使用它,因为它是从纹理区域子类化的,所以它往往会导致糟糕的对象图组织。(纹理区域是图形资源,但位置和大小参数不是。

 类似资料:
  • 问题内容: 我试图在OpenGL中使用gluUnProject,首先我需要获取projectoin,model_view和viewort矩阵。根据我在网上找到的例子 但是我收到错误消息“ ValueError:glGetFloatv需要1个参数(pname),收到2:(GL_PROJECTION_MATRIX,[])” 那么,我应该使用什么来获取这些矩阵? 问题答案: 也许: 之后在变量中应该是投

  • 我使用OpenGL进行2D渲染,并希望使用实际像素坐标。我的意思是,我希望(0,0)位于窗口的左上角,而(宽度,高度)位于窗口右下角(其中宽度和高度是窗口的像素尺寸)。为了做到这一点,我使用了一个投影矩阵,该矩阵由glOrtho生成,然后传递给顶点着色器: 我使用的是LWJGL,它没有glm的绑定,所以我使用上面的OpenGL调用获得2D正交矩阵。我重置了投影矩阵,这样它就不会影响我以后的绘图调用

  • 本章节主要给大家引入视图矩阵和投影矩阵两个新的概念,如果你没有图形学基础,对这两个概念暂时还没有认知,也没有关系。通过前面的学习相信你对平移、旋转等矩阵有了一定的认知,至于投影和视图矩阵和平移、旋转等模型矩阵一样也会对WebGL顶点进行坐标变换,至于如何变换下面会逐步讲解。 在学习本章节之前,如果你对Three.js已经有了一定的了解,可以尝试从WebGL视图矩阵和投影矩阵的角度去深入理解Thre

  • 我有一个小立方体,它的表面有n个(你可以假设n=4)个可分辨的点。这些点被编号(1-N),并形成一个坐标空间,其中点#1是原点。 现在我用一个跟踪相机来获取这些点的坐标,相对于相机的坐标空间。这意味着我现在有n个向量从相机的原点指向立方体的表面。 有了这些信息,我试图计算仿射变换矩阵(旋转+平移),它代表了这两个坐标空间之间的变换。平移部分是相当琐碎的,但我正在纠结于旋转矩阵的计算。 在OpenC

  • 我需要点子,这不是家庭作业...... 我有下面的矩阵,我如何获得重复数字的坐标, 重复项[[[0,0],[1,0],[2,0],[0,1],[0,1],[0,2],[1,2],[1,3],[2,2]],[[0,3],[0,4],.........] 第1组,分离2组,分离3组,仅2组 重复项[[[0,0],[1,0],[2,0],[0,1],[0,2],[1,2],[1,3],[2,2]],[[

  • 变换矩阵 之前三节所说的坐标变换的三种方式——平移translate(),缩放scale(),以及旋转rotate()都可以通过transform()做到。 在介绍矩阵变换transform()前,我们来说一说什么是变换矩阵。 以上是Canvas中transform()方法所对应的变换矩阵。而此方法正是传入图中所示的六个参数,具体为context.transform(a,b,c,d,e,f)。 各