View Full Version : [OpenGL] inserimento avatar all' interno di un gioco 3D
bobby1112
02-06-2010, 15:14
salve ragazzi sto realizzando un gioco in openGL e come da titolo vorrei inserire degli avatar(animaletti,personaggi dei cartoni all'interno del gioco)
o fatto una googlata ma ho trovato poca roba avete qualche consiglio,tutorial dal quale posso partire grazie
La questione in sè è piuttosto semplice: crei gli elementi con un modellatore (tipo Blender) e li salvi.
Il salvataggio produce una rappresentazione di quei modelli secondo un certo formato.
A te non resta che leggere i dati salvati ed interpretarli in modo da poterli rappresentare nel tuo gioco.
Se per il gioco usi opengl l'interpretazione sarà la traduzione dei dati del modello, secondo il formato in cui è stato salvato, in una successione di invocazioni opengl che riproducano quel modello.
Ad esempio se crei un cubo e lo salvi in formato Wavefront.obj quel che devi tradurre è un file che contiene questi dati:
# Blender3D v249 OBJ File:
# www.blender3d.org
v 1.000000 1.000000 -1.000000
v 1.000000 -1.000000 -1.000000
v -1.000000 -1.000000 -1.000000
v -1.000000 1.000000 -1.000000
v 1.000000 0.999999 1.000000
v 0.999999 -1.000001 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 1.000000 1.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 -0.000000 1.000000
vn 1.000000 -0.000000 0.000000
vn -0.000000 -1.000000 -0.000000
vn -1.000000 0.000000 -0.000000
vn 0.000000 1.000000 0.000000
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6
Anche se non sembra questa robaccia è un pacchetto di istruzioni che dice come disegnare un cubo.
I dati dicono che ogni v è un vertice, che ogni vn è un normale, che ogni "f" è una faccia. Vertici e normali sono tuple di 3 valori, a cui è associato un indice progressivo corrispondente all'ordine in cui appaiono nel file. Le facce usano queligli indici (vertice/texture/normale) per creare un poligono . Significa che la prima faccia è fatta dai vertici di indici (1, 2, 3, 4), la seconda dai vertici (5, 8, 7, 6), la terza dai vertici (1, 5, 6, 2) eccetera.
Se trovi il modo per disegnare in opengl un quadrilatero usando quattro vertici hai anche il modo di riprodurre ciò che quel file rappresenta.
Tutto qua.
bobby1112
07-06-2010, 13:18
Se trovi il modo per disegnare in opengl un quadrilatero usando quattro vertici hai anche il modo di riprodurre ciò che quel file rappresenta
ok per le figure più semplici tipo cibi ecc sono riuscito a disegnarli, ma se per esempio o creato un omino in Blender (formato da diverse figure geometriche)
e adesso lo voglio disegnare all' interno del gioco come faccio?
Be', qui la trama si infittisce.
Nel caso più semplice avrai un file che anzichè contenere la definizione di un solo elemento contiene una lista di definizioni. E qui direi che non ci sia alcun problema.
Diventa un pelo più complicato quando gli elementi sono organizzati in gruppi di rendering o di trasformazione o entrambi.
Qui il file ti dirà che un certo elemento, fatto di un certo insieme di triangoli, occupa una posizione, definita attraverso dei valori che indicano rotazione, spostamento e ingrandimento di quell'elemento rispetto ad un qualche sistema di coordinate (di solito quello del nodo superiore, cioè locale).
Tu che fai? Semplicemente ti carichi i dati e prima di disegnarli usi quelle istruzioni di opengl che ti permettono di manipolare lo spazio di coordinate e dopo averli disegnati ripristini lo stato dello stesso spazio a ciò che era prima della trasformazione.
Naturalmente non è necessario occuparsi di questi dettagli se usi una delle tante librerie di rendering che usano opengl (ogre, panda, c'è tutto un bestiario). A meno che non siano proprio i dettagli ad interessarti.
bobby1112
07-06-2010, 14:29
# Blender3D v249 OBJ File: Uomo_in_3d_2.blend
# www.blender3d.org
mtllib Uomo_in_3d_2.mtl
v 1.151091 2.295871 1.208152
v 1.280190 1.225851 1.211326
v 1.151625 2.302107 3.310959
v 1.280722 1.232087 3.314133
v 0.000000 2.295871 1.208152
v 0.000000 1.225851 1.211326
v 0.000000 2.302108 3.310959
v 0.000000 1.232088 3.314133
v 0.000000 4.254951 2.605729
v 0.000000 4.252863 1.901786
v 0.167171 4.254950 2.605730
v 0.168049 4.252862 1.901785
v 0.565875 3.464049 2.891347
v 0.000000 3.464049 2.891347
v 0.000000 3.460281 1.620864
v 0.566181 3.460281 1.620864
v 0.861679 2.877268 3.103251
v 0.000000 2.877269 3.103251
v 0.000000 2.872254 1.412444
v 0.861560 2.872254 1.412444
v 0.546732 2.295871 1.208152
v 0.546732 1.225851 1.211326
v 0.172715 4.252863 1.901786
v 0.324192 3.460281 1.620864
v 0.436575 2.872254 1.412444
v 0.541476 2.302108 3.310959
v 0.541475 1.232087 3.314133
v 0.171054 4.254950 2.605729
v 0.321075 3.464049 2.891347
v 0.432377 2.877269 3.103251
v 1.155049 2.298958 2.249041
v 1.284147 1.228938 2.252215
v 0.161534 4.253896 2.250238
v 0.563908 3.462146 2.249753
v 0.862434 2.874736 2.249394
v 1.154018 2.297353 1.707779
v 1.283116 1.227333 1.710953
v 0.163232 4.253358 2.069043
v 0.564500 3.461176 1.922731
v 0.862206 2.873445 1.814180
v 1.148615 2.300533 2.780000
v 1.277713 1.230512 2.783174
v 0.172125 4.254423 2.427984
v 0.567604 3.463097 2.570550
v 0.861015 2.876002 2.676322
v 1.404163 0.504744 1.213464
v 0.546732 0.543477 1.213350
v 0.000000 0.228502 1.214284
v 1.404696 0.510981 3.316272
v 0.541475 0.510981 3.316272
v 0.000000 0.239164 3.317078
v 1.407089 0.506226 1.713091
v 1.408120 0.507831 2.254354
v 1.401687 0.509406 2.785313
v 0.239081 0.119357 1.989432
v 0.000000 0.229531 1.989105
v 0.338764 0.354000 2.541913
v 0.000000 0.231172 2.542277
v 1.026361 0.432356 1.506593
v 0.130973 0.231047 1.554302
v 1.024621 0.436832 3.015981
v 0.722472 0.370039 2.973982
v 1.394073 0.457906 1.812523
v 1.422990 0.465220 2.254590
v 1.391647 0.460531 2.697345
v 0.393731 0.081944 1.998149
v 0.567533 0.119733 2.532995
v 1.028250 0.186255 1.611924
v 1.334862 0.156222 1.568733
v 1.333207 0.160874 2.955340
v 1.025282 0.191092 2.916486
v 1.451492 0.144927 1.849881
v 1.480844 0.142870 2.256014
v 1.449185 0.148090 2.662725
v 0.347793 0.079028 2.019578
v 0.401238 0.081144 2.511014
v 1.028250 -0.640122 1.875567
v 1.334862 -0.670103 1.849788
v 1.025282 -0.636842 2.655304
v 1.333207 -0.667105 2.678563
v 1.451492 -0.681733 2.017844
v 1.480844 -0.684275 2.260594
v 1.449185 -0.679540 2.503681
v 0.623346 -0.712432 2.119247
v 0.621325 -0.710902 2.412978
v 1.007241 -1.594569 1.864689
v 1.313854 -1.624550 1.838910
v 1.004274 -1.591289 2.644425
v 1.312199 -1.621552 2.667685
v 1.430483 -1.636180 2.006966
v 1.459836 -1.638722 2.249716
v 1.428177 -1.633987 2.492803
v 0.800548 -1.702282 2.108473
v 0.798527 -1.700752 2.402204
v 1.028250 -2.040291 1.754036
v 1.334862 -2.070296 1.719879
v 1.025282 -2.036262 2.786315
v 1.333207 -2.066502 2.817078
v 1.451492 -2.081765 1.942354
v 1.480844 -2.084074 2.263723
v 1.449185 -2.079105 2.585545
v 0.821557 -2.147770 2.076674
v 0.819536 -2.145958 2.465539
v 1.334862 -2.621542 1.785151
v 1.028250 -2.591548 1.815331
v 1.333207 -2.618126 2.754934
v 1.025282 -2.587875 2.727733
v 1.451492 -2.633087 1.981794
v 1.480844 -2.635507 2.265844
v 1.449185 -2.630649 2.550292
v 0.821557 -2.699138 2.100538
v 0.819536 -2.697460 2.444245
v 1.334862 -3.643385 1.787792
v 1.028250 -3.618635 1.817973
v 1.025282 -3.614961 2.730375
v 1.333207 -3.639969 2.757576
v 1.451492 -3.654931 1.984436
v 1.480844 -3.526286 2.268486
v 1.449185 -3.652492 2.552934
v 0.821557 -3.589917 2.103180
v 0.819536 -3.588239 2.446887
v 1.465375 -3.665706 2.705399
v 1.713758 -4.874122 2.906869
v 0.656885 -4.874122 2.906869
v 0.877378 -3.658257 2.731033
v 1.465376 -3.884426 3.027142
v 1.713758 -4.870987 3.963738
v 0.656885 -4.870986 3.963738
v 0.877378 -3.906339 3.095969
v 0.877378 -3.659474 2.320661
v 0.656885 -4.876310 2.169263
v 1.713758 -4.876310 2.169263
v 1.465375 -3.666779 2.343598
v 1.465375 -3.667852 1.981680
v 1.713758 -4.878498 1.570871
v 0.656885 -4.878498 1.570871
v 0.877378 -3.660692 1.910156
v 1.622821 -4.383502 2.678382
v 0.747823 -4.383502 2.678382
v 1.664412 -4.571239 4.215429
v 0.706231 -4.571238 4.215429
v 0.747823 -4.385313 2.067708
v 1.622821 -4.385313 2.067708
v 1.622821 -4.387125 1.690063
v 0.747823 -4.387125 1.690063
v 0.747823 -4.387125 1.690063
v 1.622821 -4.387125 1.690063
usemtl Material
s 1
f 5 21 22 6
f 21 1 2 22
f 10 23 24 15
f 23 12 16 24
f 19 25 21 5
f 1 21 25 20
f 15 24 25 19
f 24 16 20 25
f 3 26 27 4
f 26 7 8 27
f 11 28 29 13
f 28 9 14 29
f 17 30 26 3
f 30 18 7 26
f 13 29 30 17
f 29 14 18 30
f 1 36 37 2
f 36 31 32 37
f 12 38 39 16
f 38 33 34 39
f 36 1 20 40
f 40 35 31 36
f 16 39 40 20
f 39 34 35 40
f 31 41 42 32
f 41 3 4 42
f 33 43 44 34
f 43 11 13 44
f 35 45 41 31
f 45 17 3 41
f 34 44 45 35
f 44 13 17 45
f 22 2 46 47
f 6 22 47 48
f 4 27 50 49
f 27 8 51 50
f 2 37 52 46
f 37 32 53 52
f 42 4 49 54
f 32 42 54 53
f 48 47 55 56
f 50 51 58 57
f 55 57 58 56
f 47 46 59 60
f 49 50 62 61
f 46 52 63 59
f 52 53 64 63
f 54 49 61 65
f 53 54 65 64
f 55 47 60 66
f 50 57 67 62
f 57 55 66 67
f 60 59 69 68
f 61 62 71 70
f 59 63 72 69
f 63 64 73 72
f 65 61 70 74
f 64 65 74 73
f 66 60 68 75
f 62 67 76 71
f 67 66 75 76
f 68 69 78 77
f 70 71 79 80
f 69 72 81 78
f 72 73 82 81
f 74 70 80 83
f 73 74 83 82
f 75 68 77 84
f 71 76 85 79
f 76 75 84 85
f 77 78 87 86
f 80 79 88 89
f 78 81 90 87
f 81 82 91 90
f 83 80 89 92
f 82 83 92 91
f 84 77 86 93
f 79 85 94 88
f 85 84 93 94
f 86 87 96 95
f 89 88 97 98
f 87 90 99 96
f 90 91 100 99
f 92 89 98 101
f 91 92 101 100
f 93 86 95 102
f 88 94 103 97
f 94 93 102 103
f 95 96 104 105
f 98 97 107 106
f 96 99 108 104
f 99 100 109 108
f 101 98 106 110
f 100 101 110 109
f 102 95 105 111
f 97 103 112 107
f 103 102 111 112
f 105 104 113 114
f 106 107 115 116
f 104 108 117 113
f 108 109 118 117
f 110 106 116 119
f 109 110 119 118
f 111 105 114 120
f 107 112 121 115
f 112 111 120 121
f 123 127 128 124
f 123 124 131 132
f 132 131 136 135
f 129 141 140 126
f 141 128 127 140
f 126 140 138 122
f 140 127 123 138
f 128 141 139 124
f 141 129 125 139
f 124 139 142 131
f 139 125 130 142
f 122 138 143 133
f 138 123 132 143
f 133 143 144 134
f 143 132 135 147
f 131 142 146 136
f 142 130 137 145
f 136 146 147 135
f 145 137 134 144
f 115 129 126 116
f 115 121 125 129
f 121 120 130 125
f 120 114 137 130
f 114 113 134 137
f 113 117 133 134
f 117 118 122 133
f 119 116 126 122
f 118 119 122
per esempio questo file rappresenta un omino, ma come faccio a capire quali forme utilizzare??
devo tentare il caricamento con le librerie che mi hai elencato?
ho dato un'okkiata in giro e dicono di caricare in modelli con estensione .3ds che differenza ce Grazie
Nel formato obj se "f" ha quattro valori è un quadrilatero, se ne ha 3 è un triangolo.
Usare il formato 3ds non cambia la situazione di una virgola: devi sempre tradurlo a mano.
Per quanto riguarda le librerie citate se vuoi usarle devi prendere il tuo programma, chiuderlo e riscriverlo usando gli strumenti di quelle librerie. In questo caso il caricamento del modello si risolverebbe "semplicemente" nell'invocazione di una funzione tra i cui argomenti troveremmo il file che definisce il modello.
Si tratta comunque di un approccio diverso: non le usi accanto al tuo programma, devi proprio scrivere il tuo programma in un modo diverso. Se ti interessa più il gioco che il dettagliume opengl direi che ti converrebbe usarle. Prova a dargli un'occhiata, ad esempio:
http://www.panda3d.org/
ci sono manuali, tutorial, documentazione, tutto quanto.
bobby1112
09-06-2010, 17:30
ciao sono riuscito a caricare i modelli attraverso i file .obj adesso vorrei farti una domanda per incollare le texture su questi modelli devo farlo sempre attraverso blender?
ho scaricato dei modelli con estendione .3ds (compresi di texture) dalla rete ,li importo in blender ma poi quando vado ad esportarli in .obj non trovo nessuna informazione per quanto riguarda la texture.
:muro: :muro:
Ci sono delle opzioni nell'esportare obj di blender che determinano le informazioni contenute nel file esportato.
Nota che i materiali in obj sono scritti in un file a parte (estensione mtl) e il file obj poi contiene un riferimento al materiale. Quindi se vuoi leggere un file obj che contiene un modello con texture dovrai leggere e tradurre sia il file obj che il file mtl.
No, per la texture non "serve" caricarla dal modello, infatti per mostrarla basta fare il "bind" di una qualsiasi texture caricata da memoria prima di disegnare il modello;
l'unica informazione che deve fornire il modello sono le UV, cioè le coordinate della texture relative ad ogni vertice.
Certo, "serve" è tra virgolette perchè, generalmente ogni modello ha la sua texture, e potrebbe essere interessante caricarla quando carichi il file... ma come già detto, questo a OpenGL non interessa :D
Quello non è OpenGL, è Harry Potter.
bobby1112
09-06-2010, 20:24
# Blender3D MTL File:
# Material Count: 2
newmtl Material_#10.001
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.310588 0.423529 0.153725
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
newmtl Material_#11.001
Ns 96.078431
Ka 0.000000 0.000000 0.000000
Kd 0.523922 0.285490 0.153725
Ks 0.500000 0.500000 0.500000
Ni 1.000000
d 1.000000
illum 2
in questo caso questi valori cosa significano
Voilà:
http://people.sc.fsu.edu/~burkardt/data/mtl/mtl.html
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.