|
68 | 68 | <p>Al fine di organizzare la scena, si è scelto di utilizzare uno schema ben definito per ogni oggetto che dovrà essere renderizzato.</p> |
69 | 69 | <pre> |
70 | 70 | var oggetto = { |
| 71 | + [name:] //Nome per riconoscere l'oggetto in fase di debug |
71 | 72 | parts : [ //Array contenente tutte le parti(componenti) dell' oggetto |
72 | 73 | { |
73 | 74 | [type:] //Tipo dell'oggetto (es. Carrozzeria, RuotaAnterioreSX ecc...) |
@@ -96,7 +97,7 @@ <h3>Processo di rendering</h3> |
96 | 97 | <li>Caricare gli shader</li> |
97 | 98 | <li>Calcolare le matrici di manipolazione locali di ogni oggetto</li> |
98 | 99 | <li>Impostare i buffer per attributes e uniforms webGL</li> |
99 | | - <li>Effettuare il rendering tramite la <i>gl.drawArrays</i></li> |
| 100 | + <li>Effettuare il rendering tramite la <i>gl.drawArrays</i> o la <i>gl.drawElements</i> a seconda della necessità</li> |
100 | 101 | </ul> |
101 | 102 | Sequenza di chiamate in pseudocodice: |
102 | 103 | <pre> |
@@ -177,17 +178,23 @@ <h3>Impostazioni grafiche e ombre</h3> |
177 | 178 | <li>Alta(con ombre)[shadows]: aggiunta di shadow mapping all'impostazione high</li> |
178 | 179 | </ul> |
179 | 180 | Come modello di illuminazione è stato utilizzata una versione semplificata di quello di phong, dove per ogni materiale anzichè dover specificare le componenti |
180 | | - Ka,Kd,Ks basta specificare il colore con le usuali componenti rgba in aggiunta all'usuale fattore "lucentezza" (shininess). E' stata fatta questa scelta |
181 | | - in conseguenza del fatto che la libreria glm_light non effettua il caricamento dei materiali dai file .obj quindi sono stati inseriti direttamente nel codice |
182 | | - sorgente, per questo motivo si è optato per la più semplice specifica tramite componenti rgba che comunque con l'aggiunta della componente shininess fornisce |
183 | | - un risultato "accettabile" (anche se evidentemente lontano dal fotorealismo). |
184 | | - Per ognuna delle impostazioni è stata definita un apposita coppia di shader(vertex/fragment) all'interno del file <i>shaders.js</i>, |
185 | | - lo shader corrispondente viene caricato ad ogni ciclo di rendering tramite la funzione <i>setupShaders(gfxSettings)</i>. |
186 | | - Nel file <i>shaders.js</i> è presente anche uno shader (<i>shadowProjection</i>) utilizzato per il calcolo della depth texture utilizzata per lo shadow mapping. |
187 | | - Il calcolo della depth texture avviene ad ogni ciclo di rendering (se le ombre sono abilitate) prima del rendering della scena. |
188 | | - Nel file <i>shaders.js</i> è stato anche definito uno shader per il rendering dello skybox. |
| 181 | + Ka,Kd,Ks basta specificare il colore con le usuali componenti rgba in aggiunta all'usuale fattore "lucentezza" (shininess). <br/> |
| 182 | + E' stata fatta questa scelta in conseguenza del fatto che la libreria glm_light non effettua il caricamento dei materiali dai file .obj quindi sono stati inseriti |
| 183 | + direttamente nel codice sorgente, per questo motivo si è optato per la più semplice specifica tramite componenti rgba che comunque con l'aggiunta della componente |
| 184 | + shininess fornisce un risultato "accettabile" (anche se evidentemente lontano dal fotorealismo). <br/> |
| 185 | + Per ognuna delle impostazioni (low/high/shadows) è stata definita un apposita coppia di shader(vertex/fragment) all'interno del file <i>shaders.js</i>, |
| 186 | + lo shader corrispondente viene caricato ad ogni ciclo di rendering tramite la funzione <i>setupShaders(gfxSettings)</i>. <br/> |
| 187 | + Nel file <i>shaders.js</i> è presente anche uno shader (<i>shadowProjection</i>) utilizzato per il calcolo della depth texture utilizzata per lo shadow mapping. |
| 188 | + Il calcolo della depth texture avviene ad ogni ciclo di rendering (se le ombre sono abilitate) prima del rendering della scena. <br/> |
| 189 | + Nel file <i>shaders.js</i> è stato anche definito uno shader per il rendering dello skybox. <br/> |
| 190 | + <br/> |
| 191 | + <h4>NOTA ombre su dispositivi mobili:</h4> |
| 192 | + Le ombre causano parecchi artefatti sui dispositivi mobili a causa della precisione dimezzata dei float su molti dispositivi. Questo inoltre porta alla necessità di un valore di bias molto alto. |
| 193 | + (Per ulteriori info: <a href="https://stackoverflow.com/questions/25509968/shadow-mapping-in-webgl-without-webgl-depth-texture-on-android-devices">Discussione stackoverflow</a>) <br/> |
| 194 | + <br/> |
| 195 | + Per ridurre il problema ho cercato di ridurre il più possibile la differenza tra i valori near/far della camera utilizzata per la depth projection in modo da contenere perfettamente la scena ad ogni modo il problema |
| 196 | + è completamente risolto. Inoltre avendo utilizzato una "luce punto", la camera richiede un FoV abbastanza grande (in modo da comprire l'intera scena) e questo comporta una scarsa precisione. <br/> |
189 | 197 |
|
190 | | - NOTA: le ombre non sono attualmente supportate su dispositivi mobile (vedi: <a href="https://stackoverflow.com/questions/25509968/shadow-mapping-in-webgl-without-webgl-depth-texture-on-android-devices">Discussione stackoverflow</a>) |
191 | 198 | </p> |
192 | 199 | </div> |
193 | 200 | </body> |
|
0 commit comments