使用 Firemonkey XE2 ,我能够使用该TCube
组件创建一个立方体贴图,但我现在想要一个六边形贴图。我找不到 3d 六边形的选项。我想你可以创建一个THex
类似的,TCube
但我无法做到这一点,甚至无法接近。任何人都可以提供这样做的样本吗?
我要找的形状是六角棱柱。
使用 Firemonkey XE2 ,我能够使用该TCube
组件创建一个立方体贴图,但我现在想要一个六边形贴图。我找不到 3d 六边形的选项。我想你可以创建一个THex
类似的,TCube
但我无法做到这一点,甚至无法接近。任何人都可以提供这样做的样本吗?
我要找的形状是六角棱柱。
我正在做与您正在做的事情相同的事情,并在 Delphi 中使用六边形地图开发战略游戏。
您拥有 Delphi 本身所需的对象,即TCylinder。您应该将 SubdivisionAxes 从 12 设置为 6(此对象的默认值为 12),这就是您拥有所需对象所需的全部内容。
为了实施您的地图,我建议您也检查此链接。 http://www.redblobgames.com/grids/hexagons/
祝你好运。
您需要派生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 的例子
这在理论上应该提供一个形状,例如
您可以使用TMesh创建您需要的任何形状。
使用 Data 属性指定每个点的点、法线和纹理,以及生成的三角形的绘制顺序。
您只需要预先计算所需六边形形状的点和法线(我想这可以通过谷歌找到,或者在专门的形状编辑器中创建)