Sto indovinando si vuole in sostanza le linee di grasso? Assumiamo la linea è specificato da due punti (x0, y0)
e (x1, y1)
abbiamo poi:
float dx = x1 - x0; //delta x
float dy = y1 - y0; //delta y
float linelength = sqrtf(dx * dx + dy * dy);
dx /= linelength;
dy /= linelength;
//Ok, (dx, dy) is now a unit vector pointing in the direction of the line
//A perpendicular vector is given by (-dy, dx)
const float thickness = 5.0f; //Some number
const float px = 0.5f * thickness * (-dy); //perpendicular vector with lenght thickness * 0.5
const float py = 0.5f * thickness * dx;
glBegin(GL_QUADS);
glVertex2f(x0 + px, y0 + py);
glVertex2f(x1 + px, y1 + py);
glVertex2f(x1 - px, y1 - py);
glVertex2f(x0 - px, y0 - py);
glEnd();
Dal momento che si sta utilizzando OpenGL ES Credo che si dovrà convertire il rendering immediato modalità (glBegin
, glEnd
, ecc) per glDrawElements
. Dovrai anche convertire il quad in due triangoli.
Un'ultima cosa, sono un po 'stanco e incerto se il quadrante risultante è in senso antiorario o in senso orario, quindi girare il backface culling quando lo provi (glDisable(GL_CULL)
).
fonte
2009-12-20 21:53:46
attenzione, IBM ha brevettato questo! http://www.forbes.com/asap/2002/0624/044.html –
che è folle ... le linee di grasso dovrebbero essere gratuite per tutti – Mel
Potrei aver incasinato le spiegazioni qui. La linea è nel mezzo del rettangolo. Quindi immagina un rettangolo con una linea che lo taglia a metà nel senso della lunghezza, non in diagonale. – Mel