Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
ciao
sto facendo un semplicissimo programma con le opengl usando glut, è un cubo che gira su se stesso, ogni faccia del cubo ha un colore diverso, il problema è che le facce del cubo non distinguono bene, ero riuscito a fare una cosa simile con wxwidget e non mi dava problemi, non riesco a capire perchè adesso non visualizza il cubo correttamente, vi posto il codice cosi vedete:
manda anche uno screenshot... non tutti possono installarsi le librerie (ed eventualmente anche il sistema operativo), crearsi un progetto e debuggarlo solo per rispondere in un forum :-)
ho messo lo screenshot in allegato
nell immagine si vede che la faccia di destra che è viola è sovrastata da quella dietro che è rossa, e quella superiore che dovrebbe essere bianca non si vede praticamente
ho scoperto che è importante l'ordine in cui disegno le facce del cubo, le facce che disegno per ultimo restano davanti a quelle disegnate prima, però il mio cubo poi dovra girare e non posso cambiare l'ordine in cui disegno le facce ogni volta, non cè un modo per far si che l'ordine non sia importante ma che invece mi mostra solo gli oggetti che sono davanti e quelli dietro restano nascosti?
Le operazioni di disegno tramite vertici vengono gestite da OpenGL come una pila LIFO (last-in first-out). In pratica l'ultimo glVertex dichiarato verrà disegnato per primo. OpenGL dovrebbe anche ottimizzare il tuo cubo e disegnartelo correttamente tenendo in considerazione le varie coordinate z, ma credo non lo faccia per via del multiplo utilizzo di glBegin() e glEnd(). Mi sembrava esistesse un modo migliore per disegnare piu poligoni contemporaneamente all'interno di un solo blocco glBegin() - glEnd() ma purtroppo non lo ricordo. Forse potrebbe essere GL_QUADS? Tentar non nuoce! Spero di esserti stato almeno un po' d'aiuto.
metti un glBegin(GL_QUADS);
all'inizio di tutta la parte di disegno...
lascia invariato il resto, OpenGL saprà automaticamente che deve iniziare un nuovo poligono ogni 4 vertici (elimina però i glBegin e i glEnd intermedi).
poi metti un glEnd(); alla fine e vedi se con questo risolvi il problema
ho provato a fare come mi avete detto ma non cambia niente, allego il codice, ma è uguale a quello postato tranne che ho messo glBegin(GL_QUADS) e tolto i glBegin(GL_POLYGON)
Per qualche ragione a me ignota il tuo codice compila ma da come risultato una finestra nera... Forse è un problema della mia scheda video. In fondo uso OpenGL solamente per il 2D, quindi non saprei. Potresti provare ad aggiungere nel main(), subito dopo init() un reshape(500, 500) e dirmi che succede?