如何填写这个十六进制

时间:2013-02-20 11:27:16

标签: opengl

我有一个像这样的六角形

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;

我现在如何添加坐标以添加纹理?我之前做过的唯一方法是为每一行设置它们。就像glTexCoord2f(0.0,0.0);因为这是for循环我不能这样做。还有另外一种方法吗?还是我必须删除for循环?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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,这就是标准化纹理坐标。