Drawing a hexagon
使用Firemonkey XE2,我能够使用
我要寻找的形状是六棱柱。
我正在做您正在做的事情,并在Delphi中用六角形地图开发战略游戏。
Delphi本身具有所需的对象,即TCylinder。
您应该将SubdivisionAxes设置为12到6(此对象的默认值为12),这就是拥有所需对象的全部。
用于实施地图,我建议您也检查此链接。
http://www.redblobgames.com/grids/hexagons/
祝你好运。
您需要从
从中心和半径开始,点如下。假设形状平行于平面构造,然后进行变形。下面创建了一个垂直的六角棱镜(我没有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
的示例
理论上这应该提供诸如
的形状
您可以使用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上找到,或者在专门的形状编辑器中创建)