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;

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

4

2 回答 2

1

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

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

于 2013-02-20T14:15:30.487 回答
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,这就是归一化纹理坐标。

于 2013-02-21T06:16:26.233 回答