1

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

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 };
4

2 回答 2

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 };

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

于 2011-06-06T20:21:13.663 回答
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 坐标设置为“-(顶点/多边形高度)”似乎可行。您甚至不必交换第二点和第三点。您仍然需要在纹理坐标数组的末尾添加额外的点;设置为与第二点相同。

于 2013-04-11T15:16:35.627 回答