绘制六边形

时间:2014-06-16 06:00:42

标签: delphi delphi-xe2 firemonkey hexagonal-tiles

使用Firemonkey XE2,我能够使用TCube组件创建一个立方体地图,但我现在想要一个六边形地图。没有我能找到的三角形六角形的选择。我想你可以创建一个类似于THex的{​​{1}},但我无法做到这一点,甚至无法接近。任何人都可以提供这样做的样本吗?

我正在寻找的形状是hexagon prism

enter image description here

3 个答案:

答案 0 :(得分:4)

我正在做你正在做的事情,并在德尔福开发一个带六边形地图的战略游戏。

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

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

祝你好运。

答案 1 :(得分: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个索引。

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

我发现this link有继承和使用TCustomMesh

的示例

这应该在理论上提供诸如

之类的形状

enter image description here

答案 2 :(得分:1)

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

  

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

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