Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Rasturizer/Rasturizer.cpp@7:15543cb10a14, 2019-02-23 (annotated)
- Committer:
- el17cd
- Date:
- Sat Feb 23 17:45:43 2019 +0000
- Revision:
- 7:15543cb10a14
- Parent:
- 6:75031d14fc0d
- Child:
- 8:a667bc5050c1
Working rotation in y axis!!!!!
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el17cd | 1:044238f7bdda | 1 | #include "mbed.h" |
| el17cd | 1:044238f7bdda | 2 | #include "Rasturizer.h" |
| el17cd | 2:a5bc7b3779f7 | 3 | |
| el17cd | 4:759a5c34e239 | 4 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
| el17cd | 3:2e31dfcb712a | 5 | |
| el17cd | 3:2e31dfcb712a | 6 | |
| el17cd | 4:759a5c34e239 | 7 | Rasturizer::Rasturizer(){ |
| el17cd | 3:2e31dfcb712a | 8 | lcd.init(); |
| el17cd | 4:759a5c34e239 | 9 | } |
| el17cd | 1:044238f7bdda | 10 | |
| el17cd | 4:759a5c34e239 | 11 | void Rasturizer::drawFace(Face face){ |
| el17cd | 7:15543cb10a14 | 12 | double points[4][3]; |
| el17cd | 4:759a5c34e239 | 13 | for(int vertex = 0; vertex < 4; vertex++){ |
| el17cd | 4:759a5c34e239 | 14 | for(int axis = 0; axis < 3; axis++){ |
| el17cd | 4:759a5c34e239 | 15 | points[vertex][axis] = face.getVertexValue(vertex, axis); |
| el17cd | 4:759a5c34e239 | 16 | } |
| el17cd | 4:759a5c34e239 | 17 | } |
| el17cd | 7:15543cb10a14 | 18 | //double avgZ = points[0][2] + points[1][2] + points[2][2] + points[3][2];//not needed if no rotation |
| el17cd | 6:75031d14fc0d | 19 | |
| el17cd | 7:15543cb10a14 | 20 | if (points[0][2] > 5 || points[1][2] > 5 || points[2][2] > 5|| points[3][2]>5){ |
| el17cd | 7:15543cb10a14 | 21 | int diffX1 = points[0][0]-points[1][0]; |
| el17cd | 7:15543cb10a14 | 22 | int diffY1 = points[0][1]-points[1][1]; |
| el17cd | 7:15543cb10a14 | 23 | int diffX2 = points[2][0]-points[3][0]; |
| el17cd | 7:15543cb10a14 | 24 | int diffY2 = points[2][1]-points[3][1]; |
| el17cd | 7:15543cb10a14 | 25 | /* |
| el17cd | 7:15543cb10a14 | 26 | if (abs(diffX1) > abs(diffX2)){ |
| el17cd | 7:15543cb10a14 | 27 | |
| el17cd | 7:15543cb10a14 | 28 | double step = (double)diffY1/(double)diffX1; |
| el17cd | 7:15543cb10a14 | 29 | double stepSmall1 = (double)diffX2/(double)diffX1; |
| el17cd | 7:15543cb10a14 | 30 | double stepSmall2 = (double)diffY2/(double)diffX1; |
| el17cd | 7:15543cb10a14 | 31 | lcd.printString("top",0,0); |
| el17cd | 7:15543cb10a14 | 32 | for(int s = 0; s<= abs(diffX1)-1; s++){ |
| el17cd | 7:15543cb10a14 | 33 | lcd.drawLine((rint(points[0][0]+s)/points[0][2])+42, rint((points[0][1]+step*s)/points[0][2]), rint((points[3][0]-stepSmall1*s)/points[3][2])+42, rint((points[3][1]-stepSmall2*s)/points[3][2])+21, 0); |
| el17cd | 7:15543cb10a14 | 34 | lcd.drawLine((rint(points[0][0]+s+1)/points[0][2])+42, rint((points[0][1]+step*s)/points[0][2]), rint((points[3][0]-stepSmall1*s-1)/points[3][2])+42, rint((points[3][1]-stepSmall2*s)/points[3][2])+21, 0); |
| el17cd | 7:15543cb10a14 | 35 | |
| el17cd | 7:15543cb10a14 | 36 | //lcd.drawLine(points[0][0]+s, rint(points[0][1]+step*s), rint(points[3][0]-stepSmall1*s), rint(points[3][1]-stepSmall2*s), 0); |
| el17cd | 7:15543cb10a14 | 37 | //lcd.drawLine(points[0][0]+s+1, rint(points[0][1]+step*s), rint(points[3][0]-stepSmall1*s-1), rint(points[3][1]-stepSmall2*s), 0); |
| el17cd | 7:15543cb10a14 | 38 | |
| el17cd | 7:15543cb10a14 | 39 | } |
| el17cd | 7:15543cb10a14 | 40 | } |
| el17cd | 7:15543cb10a14 | 41 | else{ |
| el17cd | 7:15543cb10a14 | 42 | lcd.printString("bottom",0,0); |
| el17cd | 7:15543cb10a14 | 43 | double step = (double)diffY2/(double)diffX2; |
| el17cd | 7:15543cb10a14 | 44 | double stepSmall1 = (double)diffX1/(double)diffX2; |
| el17cd | 7:15543cb10a14 | 45 | double stepSmall2 = (double)diffY1/(double)diffX2; |
| el17cd | 7:15543cb10a14 | 46 | |
| el17cd | 7:15543cb10a14 | 47 | for(int s = 0; s<= abs(diffX2)-1; s++){ |
| el17cd | 7:15543cb10a14 | 48 | lcd.drawLine(rint((points[0][0]-stepSmall1*s)*(40/points[0][2]))+42, rint((points[0][1]-stepSmall2*s)*(40/points[0][2]))+21,rint((points[3][0]+s)*(40/points[3][2]))+42, rint((points[3][1]+step*s)*(40/points[3][2]))+21, 0); |
| el17cd | 7:15543cb10a14 | 49 | lcd.drawLine(rint((points[0][0]-stepSmall1*s-1)*(40/points[0][2])+42), rint((points[0][1]-stepSmall2*s)*(40/points[0][2])+21),rint((points[3][0]+s+1)*(40/points[3][2]))+42, rint((points[3][1]+step*s)*(40/points[3][2]))+21, 0); |
| el17cd | 7:15543cb10a14 | 50 | } |
| el17cd | 7:15543cb10a14 | 51 | }*/ |
| el17cd | 1:044238f7bdda | 52 | |
| el17cd | 7:15543cb10a14 | 53 | for (int i = 0; i < 3; i++){ |
| el17cd | 6:75031d14fc0d | 54 | |
| el17cd | 7:15543cb10a14 | 55 | lcd.drawLine(rint(points[i][0]*(40/points[i][2]))+42, |
| el17cd | 7:15543cb10a14 | 56 | rint(points[i][1]*(40/points[i][2]))+21, |
| el17cd | 7:15543cb10a14 | 57 | rint(points[i+1][0]*(40/points[i+1][2]))+42, |
| el17cd | 7:15543cb10a14 | 58 | rint(points[i+1][1]*(40/points[i+1][2]))+21, |
| el17cd | 7:15543cb10a14 | 59 | 1); |
| el17cd | 7:15543cb10a14 | 60 | |
| el17cd | 1:044238f7bdda | 61 | } |
| el17cd | 7:15543cb10a14 | 62 | lcd.drawLine(rint(points[0][0]*(40/points[0][2]))+42, |
| el17cd | 7:15543cb10a14 | 63 | rint(points[0][1]*(40/points[0][2]))+21, |
| el17cd | 7:15543cb10a14 | 64 | rint(points[3][0]*(40/points[3][2]))+42, |
| el17cd | 7:15543cb10a14 | 65 | rint(points[3][1]*(40/points[3][2]))+21, |
| el17cd | 7:15543cb10a14 | 66 | 1); |
| el17cd | 1:044238f7bdda | 67 | } |
| el17cd | 4:759a5c34e239 | 68 | } |
| el17cd | 4:759a5c34e239 | 69 | void Rasturizer::clear(){ |
| el17cd | 4:759a5c34e239 | 70 | lcd.clear(); |
| el17cd | 4:759a5c34e239 | 71 | } |
| el17cd | 4:759a5c34e239 | 72 | |
| el17cd | 4:759a5c34e239 | 73 | void Rasturizer::refresh(){ |
| el17cd | 4:759a5c34e239 | 74 | lcd.refresh(); |
| el17cd | 1:044238f7bdda | 75 | } |