2013-02-20 248 views
0

我想创建一个三维十六进制图。下一个和下一个六边形的匹配。像这样 hex map创建一个三维六角形图

用户输入(x)行,(X)列,它会创建一个类似的地图。

我需要3d由于我希望能够堆叠六角形在某一点,也纹理他们,但现在质疑。我如何绘制六角形。我仍然很新的OpenGL的,但我有这个画一个十六进制

glBegin(GL_POLYGON); 
for I := 0 to 6 do 
begin 
    glVertex3f(sin(i/6.0*2*PI),cos(i/6.0*2*pi),-2); 
end; 
glEnd; 

不知道这就是最好的方式和其唯一的一面。但也只是让一个巨大的六边形。当然我会需要更小的。任何关于如何参与这个项目的帮助都会很棒!在我的项目中,我有

prxleft = -1 
prxRight = 1 
prxTop = 1 
prxBottom -1 

回答

2

您正朝着正确的方向前进。有很多方法可以使用OpenGL进行绘制,而人们会认为这是最快的方法,它会让你在屏幕上显示一个六边形。要绘制多个六边形,请在for循环中包装glBegin(GL_POLYGON) ... glEnd()片段,该循环呈现适当数量的六边形。

要调整六角形的大小,您需要调整您传递到glVertex3f的值。在原始文章中,您正在绘制包含在半径为1的圆中的六角形(因为您的sincos函数的系数也是1)。如果使用较小的半径(即小于1的值),则会得到较小的六边形。

最后,你的每个六边形目前都集中在原点。要将它们移动到x和y中[-1,1]的查看区域内的其他位置,只需将偏移添加到您传入的x和y坐标中即可。glVertex3f。由于每个六边形都可能有自己的偏移量,因此您可能需要使用数组大小​​为六边形的数组,并通过外部循环对其进行索引。

+0

我甚至不会开始争论,如果这是快或不是,它只是彻头彻尾的弃用功能。 – pmr 2013-02-20 08:07:29

+0

而不是?? – 2013-02-20 08:19:07

+0

@GlenMorse顶点缓冲区对象。 – pmr 2013-02-20 08:43:40