android - 在六边形上映射纹理

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

最佳答案

纹理坐标的工作原理几乎类似于从 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 };

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

关于android - 在六边形上映射纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6256595/

相关文章:

java - A星探路 |六角握把

sql - 在六边形区域中选择相邻单元格

grid - 如何在二维数组中存储六边形网格的顶点位置?

android - androidx.paging.DataSource.Factory 时 Room 无法检索数据(使用 LiveData + Kotlin 协程)

android - 在 Android 上的 OpenGL ES 中对正方形进行纹理处理

ios - 侧面带有可点击区域的 3D 可旋转立方体

c - 一个 glTexImage2D 问题

android - Gradle从sourceSet中排除文件不起作用

android - ProgressDialog.dismiss() 在异步类 android 中不关闭

android - 扫描附近的蓝牙设备