Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:razvans:3d-engine [2023/05/07 22:47]
traian.enache created
pm:prj2023:razvans:3d-engine [2023/05/30 14:16] (current)
traian.enache [Hardware Design]
Line 4: Line 4:
 <note tip> <note tip>
 Proiectul va constitui un scanline rasterizer (tip de 3D Renderer) Proiectul va constitui un scanline rasterizer (tip de 3D Renderer)
-ce va randa o scena 3D simpla pe un ecran LCD.+ce va randa o scena 3D simpla pe un ecran OLED.
  
 Utilizatorul se va putea plimba prin aceasta scena folosind Utilizatorul se va putea plimba prin aceasta scena folosind
-cele doua manete ​de joystick.+maneta ​de joystick ​si cele 3 butoane.
  
 Scopul principal al proiectului este de a incorpora cat mai multe Scopul principal al proiectului este de a incorpora cat mai multe
Line 19: Line 19:
 Cadrele vor fi randate pe **Ecranul LCD** Cadrele vor fi randate pe **Ecranul LCD**
  
 +{{pm:​prj2023:​razvans:​Schema_bloc_pm_TE.png}}
  
 </​note>​ </​note>​
Line 24: Line 25:
 ===== Hardware Design ===== ===== Hardware Design =====
 Lista de componente: Lista de componente:
-  * Ecran LCD 128x64 pixeli ​SG12864J4 +  * Ecran OLED 128x64 pixeli ​SSD1306 
-  * 2 manete ​(knob-uri) de joystick+  * 1 maneta ​(knob) de joystick
   * 1 placa dezvoltare Arduino Uno   * 1 placa dezvoltare Arduino Uno
   * Fire de legatura   * Fire de legatura
-  * Rezistente 
   * 1 placa de prototipare (Breadboard)   * 1 placa de prototipare (Breadboard)
 +  * 3 push-buttons
 +{{ :​pm:​prj2023:​razvans:​hard_diagram_renderer.jpg?​450 |}}
 +{{ :​pm:​prj2023:​razvans:​hard_electric_renderer.jpg?​450 |}}
 ===== Software Design ===== ===== Software Design =====
 Poligoanele ce alcatuiesc scena vor fi tinute in memoria programului. Calculele vor fi efectuate folosind numere cu virgula fixa, intrucat placa Arduino Uno nu dispune de un (co)procesor matematic dedicat, iar utilizarea calculelor cu virgula mobila ar fi extrem de lenta, ceea ce nu este de dorit intr-un sistem real-time. Poligoanele ce alcatuiesc scena vor fi tinute in memoria programului. Calculele vor fi efectuate folosind numere cu virgula fixa, intrucat placa Arduino Uno nu dispune de un (co)procesor matematic dedicat, iar utilizarea calculelor cu virgula mobila ar fi extrem de lenta, ceea ce nu este de dorit intr-un sistem real-time.
 +
 +Numerele ce reprezinta componentele vectorilor pentru pozitii si viteze vor fi pe 16 biti, virgula fixa, 8 biti dupa virgula.
 +Numerele ce reprezinta componentele vectorilor unitari (asadar, orientarea observatorului:​ up, look, right) vor fi tot pe 16 biti in virgula fixa, dar cu 14 biti dupa virgula.
 +Sinusurile si cosinusurile vor fi pastrate cu 15 biti dupa virgula.
 +
 +Dupa initializarea driver-ului pentru afisarea de primitive (linii) pe display, va incepe randarea.
 +In functia loop, au loc 3 procesari importante:
 +  - Citirea senzorilor (joystick-ul si butoanele) si actualizarea pozitiei si orientarii observatorului,​ in functia update_observer().
 +  - Transformarea vertex-ilor tinuti in memoria de program din coordonate world-space in coordonate view-space, iar apoi in clip space (proiectarea acestora pe pozitiile pixelilor de pe ecran ce le corespund) si stocarea acestor coordonate in vectorul processedVertices[],​ in functia process_geometry().
 +  - Randarea wireframe-urilor pe ecran, in functia render_frame(),​ ce preia liniile din memoria de program (vectorul edges), iar pentru fiecare preia coordonatele capetelor acestora, realizeaza clipping-ul necesar, si utilizeaza o functie de biblioteca (drawLine()) pentru a le afisa pe ecran
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
pm/prj2023/razvans/3d-engine.1683488875.txt.gz · Last modified: 2023/05/07 22:47 by traian.enache
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0