2013-02-20 77 views
0

我有一个六角做过这样的如何填补这个十六进制

glEnable(GL_TEXTURE_2D); 

//GRASS 
glTexImage2d(GL_TEXTURE_2D,Level,Colorcomps,sGrass,tGrass,Border,GL_RGB,GL_UNSIGNED_BYTE,background); 
glBegin(GL_POLYGON); 
    for I := 0 to 6 do 
    begin 
     glVertex3f(COS(i/6.0*2*PI)/10+offsetx+0.2,SIN(i/6.0*2*pi)/10+offsety,-2); 
    end; 
glEnd; 

我现在该如何添加COORDS纹理添加到这个?我之前做过的唯一方法是通过为每一行设置它们。像这样glTexCoord2f(0.0,0.0);因为这是一个for循环,我不能这样做。有另一种方法吗?或者我必须删除for循环?

回答

1

将glTexCoord2f调用放在循环中,位于glVertex3f调用的上方。

要使用的坐标取决于你想要的。如果你想要所有的六边形具有相同的纹理,那么给它们所有相同的纹理坐标。最简单的情况是一个正方形的纹理,其中刻有六角形。线将是这样的:

glTexCoord2f(COS(i/6.0 * 2 * PI)* 0.5 + 0.5,SIN(i/6.0 * 2 * pi)* 0.5 + 0.5);

六角形绳索从-1变为1,因此乘以0.5会使它们变为-0.5至0.5。然后加0.5使它们从0变为1,这是归一化的纹理坐标。

+0

工作很好,谢谢! – 2013-02-21 06:33:12

1

假设您可以参数化地计算所需的纹理坐标,没有什么能阻止您从循环内部调用glTexCoord2f()

您应该在提交相应的glVertex3f()之前调用它。

+0

是的,但如何计算坐标? – 2013-02-20 22:06:16