3

使用 Firemonkey XE2 ,我能够使用该TCube组件创建一个立方体贴图,但我现在想要一个六边形贴图。我找不到 3d 六边形的选项。我想你可以创建一个THex类似的,TCube但我无法做到这一点,甚至无法接近。任何人都可以提供这样做的样本吗?

我要找的形状是六角棱柱

在此处输入图像描述

4

3 回答 3

4

我正在做与您正在做的事情相同的事情,并在 Delphi 中使用六边形地图开发战略游戏。

您拥有 Delphi 本身所需的对象,即TCylinder。您应该将 SubdivisionAxes 从 12 设置为 6(此对象的默认值为 12),这就是您拥有所需对象所需的全部内容。

为了实施您的地图,我建议您也检查此链接。 http://www.redblobgames.com/grids/hexagons/

祝你好运。

于 2014-06-23T09:38:07.133 回答
3

您需要派生TCustomMesh并覆盖Render以传入您计算的顶点。

从中心和半径开始,点如下。假设形状平行于平面构造并随后进行变换。下面创建一个垂直的六角棱镜(我没有 IDE atm 也没有办法测试这个!)。

ClearPoints();
prismEnd := -1;
while prismEnd < 2 do
begin
    Z := Center.Z + (prismEnd * length)
    angle = 0;
    AddPoint(0, 0, Z);
    while angle < 360 do
    begin
        X := Center.X + (radius * Cos(DegToRad(angle)));
        Y := Center.Y + (radius * Sin(DegToRad(angle)));
        AddPoint(X, Y, Z);
        Inc(angle, 60);
    end;
    Inc(prismEnd, 2);
end;

对于这创建的 6 个值,TexCoords应该是

Tex X   Tex Y 
1       0.5
0.75    1
0.25    1
0       0.5
0.25    0
0.75    0

您需要 24 个三角形来渲染它,这取决于您的绘制方法可能需要多达 72 个索引。

但这取决于您如何映射纹理。

我发现这个链接有继承和使用 TCustomMesh 的例子

在理论上应该提供一个形状,例如

在此处输入图像描述

于 2014-06-18T08:48:20.593 回答
1

您可以使用TMesh创建您需要的任何形状。

使用 Data 属性指定每个点的点、法线和纹理,以及生成的三角形的绘制顺序。

您只需要预先计算所需六边形形状的点和法线(我想这可以通过谷歌找到,或者在专门的形状编辑器中创建)

于 2014-06-18T08:07:05.917 回答