2012-01-06 7 views
6

Próbuję mapa tekstury do okręgu przy użyciu GL_POLYGON przy użyciu tego kodu:teksturach okrąg wykonany przy użyciu 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); 
} 

wygląda to podczas biegu.

img1

I powinna wyglądać następująco:

img2

+1

x i y są przechodzącą w glTexCoord2f są skalowane przez kr i tłumaczone przez c. pos, czy to jest zamierzone? Typowe wartości w glTexCoord2f wynoszą 0,0-> 1,0 (chociaż można je zawijać, upewniam się, że masz na myśli potencjalnie duże wartości). – ClickerMonkey

+0

Tylko sugestia: Zamiast GL_POLYGON użyłbym GL_TRIANGLE_FAN, początkowy wierzchołek jest równy (0,0) i współrzędna tekstury (0,5, 0,5) - to da ci (nieco) solidną korektę perspektywy tekstur. Plus nie jest przestarzałe. Proponuję także przełączanie na tablice wierzchołków. – datenwolf

Odpowiedz

7

Spróbuj:

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); 
+0

Dziękuję bardzo! :) nigdy nie pomyślałbym, że matematyka lekko mnie złapała. –