2014-06-16 148 views
3

使用Firemonkey XE2,我能够使用TCube组件创建立方体贴图,但我现在想要六角形贴图。没有选择我能找到的三维六角形。我想你可以创建一个类似于TCubeTHex,但我一直无法做到这一点,甚至无法完成。任何人都可以提供这样做的样本吗?绘制六角形

我在找的形状是hexagon prism

enter image description here

+0

六角形不是3D形状,[使用六角形瓷砖的3D“球形”形状不是真的可行](http://stackoverflow.com/questions/12847654/hexagon-grid-on-sphere-without -五角大楼)。你的意思是创建一个[Dodecahedron](http://en.wikipedia.org/wiki/Dodecahedron)? –

+0

呃,没有更多的六角棱镜http://en.wikipedia.org/wiki/Uniform_prism –

+0

更好的回答任何人!不要认为这些都是值得500代表 –

回答

4

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

你有在Delphi本身需要的对象,那就是TCylinder。 你应该设置SubdivisionAxes从12到6(12是此对象的默认值),这就是所有你需要拥有你想要的对象。

为了实现你的地图我建议你也检查一下这个链接。 http://www.redblobgames.com/grids/hexagons/

祝你好运。

+0

完美!无论如何,在这里与你联系。很想看看你的工作。 –

+0

@GlenMorse你可以在我的个人资料中找到我的电子邮件。感谢您接受答案:) – Loghman

+0

感谢得到它..要送你一件东西在这里很快..干杯 –

1

您可以使用TMesh创造任何你需要的形状。

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

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

+0

我无法在谷歌上找到他们,并仍然有点新的这个3d。不确定如何计算这个 –

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

+0

Delphi在for循环中没有可能性。虽然有可能使用[这里](http://stackoverflow.com/a/16371783/576719)显示的一些结构。 –

+0

@LURD自从我与德尔福合作以来,这已经太长了我想!我现在会修复它 –

+0

我理解如何或计算如何获取数据,但是如何将它合并到X组件中来绘制它。 –