2012-01-06 16 views
6

Sto cercando di mappare una texture a un cerchio utilizzando GL_POLYGON utilizzando questo codice:Texture Mapping un cerchio realizzato con 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); 
} 

Ecco come si presenta durante l'esecuzione.

img1

E dovrebbe assomigliare a questo:

img2

+1

xey si passa in glTexCoord2f vengono scalati da CR e tradotti dal c. pos, è questo inteso? I valori tipici in glTexCoord2f sono 0.0-> 1.0 (anche se può essere eseguito a capo, mi sto assicurando che intendessi avere valori potenzialmente grandi). – ClickerMonkey

+0

Solo un suggerimento: invece di GL_POLYGON, userei un GL_TRIANGLE_FAN, il vertice di partenza è a (0,0) e la coordinata della trama (0,5, 0,5) - questo ti darà una (leggermente) correzione prospettica di texture robusta. Inoltre non è deprecato. Inoltre suggerisco di passare agli array dei vertex. – datenwolf

risposta

7

Prova:

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

Grazie mille! :) non avrebbe mai pensato di farlo che la matematica mi ha leggermente catturato. –