使用Firemonkey XE2,我能够使用TCube
组件创建一个立方体地图,但我现在想要一个六边形地图。没有我能找到的三角形六角形的选择。我想你可以创建一个类似于THex
的{{1}},但我无法做到这一点,甚至无法接近。任何人都可以提供这样做的样本吗?
我正在寻找的形状是hexagon prism。
答案 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
的示例这应该在理论上提供诸如
之类的形状
答案 2 :(得分:1)
您可以使用TMesh创建所需的任何形状。
使用Data属性指定点,法线和纹理 每个点,以及绘制结果三角形的顺序。
您需要的是预先计算出的所需六边形形状的点和法线(我想这可以通过谷歌找到,或者在专门的形状编辑器中创建)