OpenGL-ES 纹理图集。 t 轴反转

发布于 2024-09-02 07:39:54 字数 2223 浏览 3 评论 0原文

我正在将纹理从纹理图集映射到立方体上的正方形。由于某种原因,t 轴反转,0 位于顶部,1 位于底部。有什么想法为什么会发生这种情况吗?

另外,我必须按顺时针顺序而不是逆时针顺序指定纹理坐标。我使用的是逆时针缠绕。我使用的顶点、索引和纹理坐标如下。

 float vertices[] = { 
     // Front face
     -width, -height, depth, // 0
     width, -height, depth, // 1
     width,  height, depth, // 2
     -width,  height, depth, // 3

            // Back Face
            width, -height, -depth, // 4
          -width, -height, -depth, // 5
            -width,  height, -depth, // 6
            width,  height, -depth, // 7

            // Left face
            -width, -height, -depth, // 8
            -width, -height, depth, // 9
            -width,  height, depth, // 10
            -width,  height, -depth, // 11

            // Right face
            width, -height, depth, // 12
            width, -height, -depth, // 13
            width,  height, -depth, // 14
            width,  height, depth, // 15

            // Top face
            -width,  height, depth, // 16
            width,  height, depth, // 17
            width,  height, -depth, // 18
            -width,  height, -depth, // 19

            // Bottom face
          -width, -height, -depth, // 20
          width, -height, -depth, // 21
          width, -height, depth, // 22
          -width, -height, depth, // 23
    };

    short indices[] = { 
      // Front   // Back
      0,1,2, 0,2,3,  4,5,6, 4,6,7,
      // Left    // Right
      8,9,10, 8,10,11,  12,13,14, 12,14,15,
      // Top    // Bottom
      16,17,18, 16,18,19, 20,21,22, 20,22,23,
    };


    float textures[] = {
  // Front
  0.0f, 0.0f, 0.25f, 0.0f, 0.25f, 0.25f, 0.0f, 0.25f,
        // Back
     0.25f, 0.0f, 0.50f, 0.0f, 0.50f, 0.25f, 0.25f, 0.25f,
        // Left
     0.50f, 0.0f, 0.75f, 0.0f, 0.75f, 0.25f, 0.50f, 0.25f,
        // Right
     0.75f, 0.0f, 1f, 0.0f, 1f, 0.25f, 0.75f, 0.25f,
        // Top
     0.0f, 0.25f, 0.25f, 0.25f, 0.25f, 0.50f, 0.0f, 0.50f,
        // Bottom
     0.25f, 0.25f, 0.50f, 0.25f, 0.50f, 0.50f, 0.25f, 0.50f,
    };

我的纹理 - 在 mspaint 中创建的 256x256 .png 文件。

替代文本 http://www.freeimagehosting.net/uploads/9a87120b99.png

I'm mapping a texture from my texture atlas to a square on a cube. For some reason, the t axis is inverted with 0 being at the top and 1 being at the bottom. Any ideas why this is happening?

Also, I have to specify the texture coordinates in clockwise order rather than counter-clockwise. I am using counter-clockwise windings. The vertices, indices and texture coordinates I'm using are below.

 float vertices[] = { 
     // Front face
     -width, -height, depth, // 0
     width, -height, depth, // 1
     width,  height, depth, // 2
     -width,  height, depth, // 3

            // Back Face
            width, -height, -depth, // 4
          -width, -height, -depth, // 5
            -width,  height, -depth, // 6
            width,  height, -depth, // 7

            // Left face
            -width, -height, -depth, // 8
            -width, -height, depth, // 9
            -width,  height, depth, // 10
            -width,  height, -depth, // 11

            // Right face
            width, -height, depth, // 12
            width, -height, -depth, // 13
            width,  height, -depth, // 14
            width,  height, depth, // 15

            // Top face
            -width,  height, depth, // 16
            width,  height, depth, // 17
            width,  height, -depth, // 18
            -width,  height, -depth, // 19

            // Bottom face
          -width, -height, -depth, // 20
          width, -height, -depth, // 21
          width, -height, depth, // 22
          -width, -height, depth, // 23
    };

    short indices[] = { 
      // Front   // Back
      0,1,2, 0,2,3,  4,5,6, 4,6,7,
      // Left    // Right
      8,9,10, 8,10,11,  12,13,14, 12,14,15,
      // Top    // Bottom
      16,17,18, 16,18,19, 20,21,22, 20,22,23,
    };


    float textures[] = {
  // Front
  0.0f, 0.0f, 0.25f, 0.0f, 0.25f, 0.25f, 0.0f, 0.25f,
        // Back
     0.25f, 0.0f, 0.50f, 0.0f, 0.50f, 0.25f, 0.25f, 0.25f,
        // Left
     0.50f, 0.0f, 0.75f, 0.0f, 0.75f, 0.25f, 0.50f, 0.25f,
        // Right
     0.75f, 0.0f, 1f, 0.0f, 1f, 0.25f, 0.75f, 0.25f,
        // Top
     0.0f, 0.25f, 0.25f, 0.25f, 0.25f, 0.50f, 0.0f, 0.50f,
        // Bottom
     0.25f, 0.25f, 0.50f, 0.25f, 0.50f, 0.50f, 0.25f, 0.50f,
    };

My texture - a 256x256 .png file created in mspaint.

alt text http://www.freeimagehosting.net/uploads/9a87120b99.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

信愁 2024-09-09 07:39:54

因此,在网上进行更多搜索后,OpenGL 似乎假设图像从底部扫描线开始,这意味着您需要反转 y/t 坐标。或者在查看原始图像时使用左上角原点。

So after yet more searching on the web, it seems that OpenGL assumes an image starts at the bottom scanline, meaning that you need to invert your y/t coordinates. Or use an upper left hand origin when looking at your original image.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文