PDA

View Full Version : [c++ & openGL] Durante l'animazione movimenti a scatti! sembra banale, ma...........


doctorAle85
04-01-2008, 22:01
Scusate a tutti, se vi rompo troppo le scatole, ma ho un problema molto curioso, ma al tempo stesso anche strano e che mi fa incazzare da morire!

Sto simulando un piccolo aereo con un'elica davanti... il modello (file ASE) esportato da 3ds max (spuntando tutte le opzioni che compaiono quando lo esporto) è formato dalla carena che rappresenta quasi tutto l'aereo, la cabina, le ruote e l'elica!
Nell'animazione faccio girare l'elica e faccio muovere l'aereo...
All'inizio ho provato a far muovere l'elica e gira perfettamente senza alcun segno di scatto!...se aggiungo ruote e cabina (dentro il metodo draw nel file cpp) va bene lo stesso!
Appena aggiungo la carena (sempre in draw) che è la parte principale, non si per quale motivo ma sia il movimento dell'elica che dell'aereo (per esempio che avanza) appaiono a scatti! Il motivo non ha a che fare con le variabili che manovrano la rotazione dell'elica e la traslazione dell'aereo...ma non c'entra niente neanche la variabile che regola i frame per secondo!!!...le ho provate tutte!
Il problema è esclusivamente legato al disegno della carena...
Non so se questa cosa è mai capitata a qualcuno, ma è tanto strana!
Sapete darmi qualche dritta?
grazie

71104
04-01-2008, 22:37
a parte che non so cos'è una "carena"... :D
comunque può essere un banale problema di performance? nel senso... da quanti poligoni è composta sta carena? :D

doctorAle85
04-01-2008, 22:53
a parte che non so cos'è una "carena"... :D
comunque può essere un banale problema di performance? nel senso... da quanti poligoni è composta sta carena? :D

Come si fa a vedere il numero di poligoni?

Come si può migliorare questo problema di performance?

Non so se ho usato il termine giusto per quanto riguarda "carena"!...che ne so chiamala scocca...insomma il copro dell'aereo che comprende tutto...la parte principale!

Mi era venuta in mente una cosa del genere e cioè la complessità del modello, ma non mi sembra troppo complicato!...non ha moltissimi dettagli!

leggendo nel file ASE sotto la mesh "carena" ho letto *MESH_NUMVERTEX 4455
*MESH_NUMFACES 8418

considera che la cabina per esempio ne avrà 1/5 di questi!

Però boh...aiuto!!!!:muro: :muro: :muro: :muro: :muro: :cry: :cry: :cry: :confused:

71104
04-01-2008, 23:16
eh oddio, 8000 facce e rotti... se non hai un granché come scheda grafica la cosa potrebbe giustificare il ritardo. prova qualche ottimizzazione: innanzitutto crea delle liste di comandi, così tra l'altro puoi eliminare vertici e facce dal tuo programma e hai meno variabili da gestire, e poi prova ad utilizzare il vertex buffer.

doctorAle85
04-01-2008, 23:51
eh oddio, 8000 facce e rotti... se non hai un granché come scheda grafica la cosa potrebbe giustificare il ritardo. prova qualche ottimizzazione: innanzitutto crea delle liste di comandi, così tra l'altro puoi eliminare vertici e facce dal tuo programma e hai meno variabili da gestire, e poi prova ad utilizzare il vertex buffer.

Scusami, ma non c'ho capito niente...non sono un esperto altrimenti qualche soluzione l'avrei trovata!!!;)

La mia scheda grafica su portatile non penso che sia da sottovalutare... è una NVIDIA 8400M GT

okay
05-01-2008, 09:54
Scusate a tutti, se vi rompo troppo le scatole, ma ho un problema molto curioso, ma al tempo stesso anche strano e che mi fa incazzare da morire!

Sto simulando un piccolo aereo con un'elica davanti... il modello (file ASE) esportato da 3ds max (spuntando tutte le opzioni che compaiono quando lo esporto) è formato dalla carena che rappresenta quasi tutto l'aereo, la cabina, le ruote e l'elica!
Nell'animazione faccio girare l'elica e faccio muovere l'aereo...
All'inizio ho provato a far muovere l'elica e gira perfettamente senza alcun segno di scatto!...se aggiungo ruote e cabina (dentro il metodo draw nel file cpp) va bene lo stesso!
Appena aggiungo la carena (sempre in draw) che è la parte principale, non si per quale motivo ma sia il movimento dell'elica che dell'aereo (per esempio che avanza) appaiono a scatti! Il motivo non ha a che fare con le variabili che manovrano la rotazione dell'elica e la traslazione dell'aereo...ma non c'entra niente neanche la variabile che regola i frame per secondo!!!...le ho provate tutte!
Il problema è esclusivamente legato al disegno della carena...
Non so se questa cosa è mai capitata a qualcuno, ma è tanto strana!
Sapete darmi qualche dritta?
grazie

da 3dsmax esporti come mesh unica (carena+elica+ruote+cabina)? fino ad avere un unica mesh? che ne sò aereo.x

oppure esporti 4 mesh: elica.x carena.x ruote.x e cabina.x

se usi questultimo cioè hai + mesh le devi renderizzare ognuna con una sua matrice identità nel render.

Controlla che carena.x (in 3dsmax) prima di esportarla la devi mettere a coordinate 0 0 0 come del resto tutte le altre mesh esportate se no ti ritrovi carena.x nel mondo (worldspace) a coordinate 0, 0, 0 e poi di nuovo alle coordinate locali forse è questo che ti dà lo sfarfallio sul monitor

71104
05-01-2008, 12:52
Scusami, ma non c'ho capito niente...non sono un esperto altrimenti qualche soluzione l'avrei trovata!!!;) le funzioni per gestire le liste di comandi sono sostanzialmente glNewList, glEndList, glDeleteLists, glCallList (vedi la documentazione su opengl.org). nota che una volta che hai creato una lista con tutti i comandi glVertex non hai più bisogno di tenerti in memoria le mesh, anzi è meglio che non lo fai visto che lo fa già OpenGL sotto forma di comandi di rendering.

per quanto riguarda invece il vertex buffer guardati questo tutorial di NeHe:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=45

La mia scheda grafica su portatile non penso che sia da sottovalutare... è una NVIDIA 8400M GT non so se siano realmente le 8000 facce il problema: bisognerebbe vedere il codice che hai scritto per vedere se è possibile ottimizzare qualche altro aspetto.

doctorAle85
05-01-2008, 22:12
non so se siano realmente le 8000 facce il problema: bisognerebbe vedere il codice che hai scritto per vedere se è possibile ottimizzare qualche altro aspetto.

mi sa di si invece...perchè il mio file ASE occupava 4.5MB e provando a utilizzare un'altro modello con meno dettagli (file ASE 1.1MB) non da alcun problema!!!