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;

これにテクスチャを追加するために座標を追加するにはどうすればよいですか? 私が以前に行った唯一の方法は、各行に設定することでした.LikeglTexCoord2f(0.0,0.0);これはforループにあるため、それを行うことはできません。別の方法はありますか?または、forループを削除する必要がありますか?

4

2 に答える 2

1

glVertex3f呼び出しのすぐ上で、glTexCoord2f呼び出しをループに入れます。

使用する座標は、必要なものによって異なります。すべての六角形に同じテクスチャを持たせたい場合は、すべて同じテクスチャ座標を指定します。最も単純なケースは、六角形が内接する正方形のテクスチャです。コードは次のようになります。

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 に答える
1

glTexCoord2f()目的のテクスチャ座標をパラメトリックに計算できると仮定すると、ループ内から呼び出すことを妨げるものは何もありません。

glVertex3f()対応するものが送信される前に呼び出す必要があります。

于 2013-02-20T14:15:30.487 に答える