2012-10-23 13 views
6

Sto programmando la mia libreria GUI 2D con OpenGL e sono al punto in cui ho un controllo contenitore che può contenere elementi grafici (come rettangolo arrotondato o stella) e altro bambino controlli ... ecc ... Provo a ritagliare il rendering dei controlli figlio e degli elementi grafici nel controllo genitore. Quindi, se un controllo figlio supera i bordi dei contenitori, non viene visualizzato.OpenGL 2D non rettangolare regione clipping

La mia prima idea è stata quella di utilizzare il "test di forbice" dopo averlo scoperto durante la ricerca sul web. Ma il problema è che sono vincolato a un clipping rettangolare e voglio essere in grado di ritagliare il contenuto in una regione arbitraria come una forma poligonale a stella.

ho un'idea ...

Quando è il momento di disegnare un controllo e dei suoi elementi di grafica, guardo se il mio controllo deve ritagliare il suo contenuto o meno. Se sì, lo disegno con un colore bianco uniforme su uno sfondo nero in una trama fuori schermo. Quindi lo mando in un programma shader. Così rendo ogni bambino (controlli ed elementi grafici) con il mio shader attivato. In questo frammento di shader, per ogni frammento, penso di guardare la stessa coordinata nella texture speciale passata prima. Se il frammento nella texture speciale è bianco, posso renderizzare questo frammento perché si trova nella regione visibile.

Pensi che possa funzionare? È una buona idea o ce n'è una migliore?

risposta

2

Può essere fatto in due modi a seconda delle esigenze. Renderizzare texture o il buffer stencil sarebbe probabilmente la scelta migliore. Questo collegamento ha più informazioni per iniziare:

OpenGL clipping

+1

Ciao e grazie per la risposta. Ho continuato a leggere e ho visto questa soluzione stencil. Non ho mai lavorato con questo, ma penso che sarà più facile da implementare di una soluzione di shader. – user1768815

Problemi correlati