我正在尝试使用以下代码使用GL_POLYGON将纹理映射到圆:

void drawCircleOutline(Circle c, int textureindex)
{
    float angle, radian, x, y;       // values needed by drawCircleOutline

    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, textureLib[textureindex]);

    glBegin(GL_POLYGON);

    for (angle=0.0; angle<360.0; angle+=2.0)
    {
        radian = angle * (pi/180.0f);

        x = (float)cos(radian) * c.r  + c.pos.x;
        y = (float)sin(radian) * c.r  + c.pos.y;

        glTexCoord2f(x, y);
        glVertex2f(x, y);
    }

    glEnd();
    glDisable(GL_TEXTURE_2D);
}


运行时看起来像这样。



并且应如下所示:

最佳答案

尝试:

radian = angle * (pi/180.0f);

xcos = (float)cos(radian);
ysin = (float)sin(radian);
x = xcos * c.r  + c.pos.x;
y = ysin * c.r  + c.pos.y;
tx = xcos * 0.5 + 0.5;
ty = ysin * 0.5 + 0.5;

glTexCoord2f(tx, ty);
glVertex2f(x, y);

07-27 13:19