我正在尝试将纹理映射到六边形,但我无法弄清楚纹理坐标。
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 };
答案 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坐标设置为“ - (顶点/多边形高度)”似乎有效。您甚至不必交换每个第二和第三点。你仍然需要在纹理坐标数组的末尾添加额外的点;设置与第二点相同。