在六边形上映射纹理

时间:2011-06-06 18:47:57

标签: android opengl-es hexagonal-tiles

我正在尝试将纹理映射到六边形,但我无法弄清楚纹理坐标。

These are my vertices:
private float vertices[] = {     0.0f,   0.0f, 0.0f,    //center
                                 0.0f,   1.0f, 0.0f,    // top
                                -1.0f,   0.5f, 0.0f,    // left top
                                -1.0f,  -0.5f, 0.0f,    // left bottom
                                 0.0f,  -1.0f, 0.0f,    // bottom
                                 1.0f,  -0.5f, 0.0f,    // right bottom
                                 1.0f,  0.5f,  0.0f};   // right top

六边形的“基座”是垂直的。 (主要是因为我无法弄清楚如何旋转该死的东西XD) 现在的问题是,我不知道如何弄清楚纹理坐标。我看了整个网络,但仍然没有成功。

如果有人可以向我解释如何弄清楚纹理坐标,我真的很感激,因为除了纹理化一个简单的方形,我无法弄明白我害怕。

注意:它是一个“方形”六边形,所以不是基于圆圈。 编辑:使用LG_TRIANGLE_STRIP绘制六边形。

问题已解决。我现在明白如何弄清楚这些坐标。以下是适用于我的那些:

private float texture[] = {     0.5f, 0.5f,
                                0.5f, 0.0f,
                                0.0f, 0.25f,
                                0.0f, 0.75f,
                                0.5f, 1.0f,
                                1.0f, 0.75f,
                                1.0f, 0.25f };

2 个答案:

答案 0 :(得分:2)

纹理坐标的工作方式几乎与0.0到1.0的百分比一样,其中(0.0,0.0)位于左下角。如果纹理图像为128 x 128像素,则点(0.25,0.25)将从左侧和底部开始为32像素。使用你在那里的东西,如果你试图将六边形刻在正方形纹理图形内,你的坐标看起来应该是这样的:

private float textureCoords = { 0.5f, 0.5f,
                                0.5f, 0.0f,
                                0.0f, 0.25f,
                                0.0f, 0.75f,
                                0.5f, 0.0f,
                                1.0f, 0.75f,
                                1.0f, 0.25f };

如果我没记错的话,你也希望图像垂直翻转。

答案 1 :(得分:0)

我几天来一直在努力解决同样的问题而且我想我已经开始了解它。如果你想象六边形上的点为A(和DGJ)在中心,B在12点位置,CEFHIK则其他点在中心逆时针旋转。

您的顶点需要在订单中列出 - ABC DEF GHI J

A,D,G和J都是相同的坐标(你的中心点)

您的纹理需要按此顺序拼接 - AEF DCB GIH JK

A,D,G和J再次成为你的中心点。 K应该与E相同,所以纹理正确排列。

编辑:回过头来看,我认为只交换每个第二和第三个坐标并从1.0f中减去每个y坐标可能更有意义。

编辑2:是的,我现在有时间检查。简单地将每个纹理y坐标设置为“ - (顶点/多边形高度)”似乎有效。您甚至不必交换每个第二和第三点。你仍然需要在纹理坐标数组的末尾添加额外的点;设置与第二点相同。