OpenGL ES中纹理坐标的正确模型

时间:2014-07-13 11:01:33

标签: java android opengl-es texturing

我在理解OpenGL ES中的纹理映射时遇到了麻烦。例如,我有一个包含以下信息的obj文件:

  1. v -75 75 -50
  2. v 75 75 -50
  3. v -75 -75 -50
  4. v 75 -75 -50

  5. vt 0 0

  6. vt 0 1
  7. vt 1 1
  8. vt 1 0

  9. f 4/3 3/2 1/1

  10. f 2/4 4/3 1/1
  11. 如果我使用此vts,则纹理未正确映射。但如果我这样切换vts:

    1. vt 1 0
    2. vt 0 1
    3. vt 1 1
    4. vt 0 0
    5. 一切正常。 我试图绘制这个坐标只是为了获得它们的可视化表示并获得这样的图像(我反转y轴坐标)。  http://imgur.com/BRQgKay 在第一种情况下,我看到良好的代表性,但它不起作用,嘿。在第二种情况下,我看到一些可怕的东西,但它有效。 为什么它有效,我完全无法理解。 有任何想法吗? 谢谢你的帮助。 编辑: http://i.stack.imgur.com/4YdpM.jpg 我添加了一些结果的解释。我们可以将纹理分成两部分(三角形)。在第一种情况下,我让这个部分在对角线周围切换。在第二种情况下,我根据划分的纹理获得了良好的映射,但我无法理解为什么它的工作原理。 对不起,如果我的解释不那么清楚。

1 个答案:

答案 0 :(得分:0)

如果我拿一支铅笔和一张纸并尝试绘制这个矩形,一切看起来都很好。我采用一个坐标系,其中X向右增加,Y向上增加。这样做的纹理坐标似乎很好,因为左上部是(0,0),右下部是(1,1)。起初困扰我的是Z坐标。因为它们是负的,所以相机位置应该小于Z(< -50)以从正面看它。

现在,模型看起来很好,但这取决于你想要做什么。但是看看你的结果,你看到镜像在X和Y镜像(镜像对角),我会开始在你的矩阵中寻找问题。 X镜像很可能是由你在后面看到它引起的:相机位置在(0,0,0)并且看向负Z.第二种很可能是由于在两种可能的方法之一中反转Y坐标引起的,glOrthoglFrustum。由于这两种方法都采用参数topbottom,因此最常设置bottom大于top,这会使Y坐标向下转。

请检查所有这些参数,因为这更像是一个猜测,然后其他任何事情。您还应该考虑使用剔除,使用它不会显示您在后面看的多边形,这样可以帮助您了解您是否看到了脸部的正面或背面。

关于交换Y坐标的注意事项:这不是错误或错误的方法,它现在是一个非常标准的程序。您必须了解大多数桌面UI元素具有坐标系以使Y指向上方,移动设备首先大量使用在UI上反转Y的倒置系统。这就是为什么(至少在2D中)最好使用与视图使用相同的坐标系的原因,但是创建模型的所有应用程序很可能会认为Y指向上方。