关于delphi:绘制六边形

Drawing a hexagon

使用Firemonkey XE2,我能够使用TCube组件创建立方体贴图,但是现在我想要一个六边形贴图。我找不到3D六角形形状的选项。我认为您可以创建类似于TCubeTHex,但是我无法做到这一点甚至无法实现。有人可以提供这样做的样本吗?

我要寻找的形状是六棱柱。

enter


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

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

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

祝你好运。


您需要从TCustomMesh派生并覆盖Render才能传入您计算出的顶点。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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应该为

1
2
3
4
5
6
7
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

的示例

理论上这应该提供诸如

的形状

enter


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

Use the Data property to specify the points, normals and textures for
each point, and the order in which the resulting triangles are drawn.

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