Lasciatemi espandere la risposta di Greg.
È vero che Qt ha una classe di rendering SVG, QSvgRenderer. Inoltre, qualsiasi disegno che fai in Qt può essere fatto su qualsiasi "QPaintDevice", dove siamo interessati ai seguenti "dispositivi di pittura":
- Un widget Qt;
- In particolare, un widget Qt basato su GL (QGLWidget); immagine
- Un Qt
Quindi, se si decide di utilizzare Qt, le opzioni sono:
- Smettere di usare il vostro attuale metodo di creazione della finestra (e il contesto GL), e iniziare a utilizzare QGLWidget per tutto il rendering, incluso il rendering SVG. Questo potrebbe essere un piccolo cambiamento, a seconda delle tue esigenze. QGLWidget non è particolarmente limitante nelle sue capacità.
- Utilizzare QSvgRenderer per eseguire il rendering su una QImage, quindi inserire i dati da tale QImage in una texture GL (come si farebbe normalmente) e renderlo come desiderato (ad esempio in un GL_QUAD rettangolare). Potrebbe avere prestazioni peggiori rispetto all'altro metodo, ma richiede la minima modifica al codice.
Ti chiedi cosa fa esattamente QGLWidget? Bene, quando invii i comandi di rendering Qt a un QGLWidget, essi vengono tradotti in chiamate GL per te. E questo succede anche quando i comandi di rendering sono emessi dal renderer SVG. Alla fine, il tuo SVG finirà per essere sottoposto a rendering tramite una serie di primitivi GL (linee, poligoni, ecc.).
Questo ha uno svantaggio. Diverse videocards implementano OpenGL in modo leggermente diverso, e Qt non (e non può) tiene conto di tutte queste differenze. Quindi, per esempio, se il tuo utente ha una scheda video Intel on-board a basso costo, la sua scheda video non supporta l'antialiasing di OpenGL, e questo significa che il tuo SVG apparirà anche alias (jaggy), se lo rendi direttamente su un QGLWidget. Passare attraverso una QImage evita tali problemi.
È possibile utilizzare il metodo QImage quando si esegue lo zoom in tempo reale. Dipende solo da quanto velocemente hai bisogno che sia. Potresti aver bisogno di attente ottimizzazioni come riutilizzare lo stesso QImage e abilitare il clipping per QPainter.
fonte
2010-11-10 09:21:21
Il monitor è un display raster, quindi a un certo punto finirà per essere rasterizzato, la domanda è se la rasterizzazione avvenga o meno in uno stadio sufficientemente avanzato da rendere conveniente fare le cose che vuoi fare. OpenGL non ha alcun supporto specifico per qualsiasi formato di file (tranne forse il codice scritto nel linguaggio shader), quindi tutto si riduce a ciò che sei disposto a scrivere. –
Fondamentalmente, questa è la stessa domanda di http://stackoverflow.com/questions/4054612/2d-vector-graphic-renderer-for-opengl – Fizz