Questo è un codice che uso per disegnare rettangolo nel mio programma:bordo intorno tessitura, OpenGL
glBegin(GL_QUADS);
glTexCoord2f(0.0f, maxTexCoordHeight); glVertex2i(pos.x, pos.y + height);
glTexCoord2f(0.0f, 0.0f); glVertex2i(pos.x, pos.y);
glTexCoord2f(maxTexCoordWidth, 0.0f); glVertex2i(pos.x + width, pos.y);
glTexCoord2f(maxTexCoordWidth, maxTexCoordHeight); glVertex2i(pos.x + width, pos.y + height);
glEnd();
Essa trae solo un semplice rettangolo con trama specificato, per esempio in questo modo:
vorrei chiedere se è possibile in OpenGL per ottenere effetto frontiera in questo modo:
Come si vede all'interno di questa tessera c'è solo un semplice sfondo blu che potrebbe essere gestito separatamente - trama ridimensionata automaticamente. Questo può essere ottenuto facilmente con uno snippet di codice che ho dato, ma il problema è con il bordo.
Se il bordo doveva essere un colore, potrei provare a disegnare un rettangolo vuoto non riempito usando GL_LINES
attorno alla mia trama, ma non lo è.
Anche se le tessere erano sempre con una dimensione fissa, potevo preparare una texura che le corrispondesse, ma DEVONO essere facilmente ridimensionabili senza cambiare un file bitmap che utilizzo come texture.
Quindi, se non è possibile con le funzioni di base OpenGL, quali sono gli approcci per ottenere questo effetto che sarebbe più efficiente e/o facile?
MODIFICA: Deve essere 2D.
A meno che non sia necessario 2d, perché non creare effettivamente l'effetto smussato creando quella forma trapezoidale in 3D e utilizzare l'illuminazione per ottenere gli effetti ombreggiati di cui hai bisogno? – Quetzalcoatl
@Quetzalcoatl Grazie per la risposta, ma sì, deve essere 2D. Modificherò la mia domanda per aggiungere queste informazioni. –
È possibile scrivere uno shader di frammenti per aggiungere il bordo. Tuttavia, se stai ancora utilizzando la modalità immediata (funzioni obsolete come 'glVertex'), probabilmente ti ci vorrà un po 'per raggiungere il meraviglioso mondo di OpenGL 2.0 e oltre. –