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
Diff: Rasturizer/Rasturizer.cpp
- Revision:
- 7:15543cb10a14
- Parent:
- 6:75031d14fc0d
- Child:
- 8:a667bc5050c1
diff -r 75031d14fc0d -r 15543cb10a14 Rasturizer/Rasturizer.cpp
--- a/Rasturizer/Rasturizer.cpp Sat Feb 23 16:19:29 2019 +0000
+++ b/Rasturizer/Rasturizer.cpp Sat Feb 23 17:45:43 2019 +0000
@@ -9,60 +9,62 @@
}
void Rasturizer::drawFace(Face face){
- float points[4][3];
+ double points[4][3];
for(int vertex = 0; vertex < 4; vertex++){
for(int axis = 0; axis < 3; axis++){
points[vertex][axis] = face.getVertexValue(vertex, axis);
}
}
-
+ //double avgZ = points[0][2] + points[1][2] + points[2][2] + points[3][2];//not needed if no rotation
- int diffX1 = points[0][0]-points[1][0];
- int diffY1 = points[0][1]-points[1][1];
- int diffX2 = points[2][0]-points[3][0];
- int diffY2 = points[2][1]-points[3][1];
- /*
- if (abs(diffX1) > abs(diffX2)){
+ if (points[0][2] > 5 || points[1][2] > 5 || points[2][2] > 5|| points[3][2]>5){
+ int diffX1 = points[0][0]-points[1][0];
+ int diffY1 = points[0][1]-points[1][1];
+ int diffX2 = points[2][0]-points[3][0];
+ int diffY2 = points[2][1]-points[3][1];
+ /*
+ if (abs(diffX1) > abs(diffX2)){
+
+ double step = (double)diffY1/(double)diffX1;
+ double stepSmall1 = (double)diffX2/(double)diffX1;
+ double stepSmall2 = (double)diffY2/(double)diffX1;
+ lcd.printString("top",0,0);
+ for(int s = 0; s<= abs(diffX1)-1; s++){
+ 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);
+ 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);
+
+ //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);
+ //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);
+
+ }
+ }
+ else{
+ lcd.printString("bottom",0,0);
+ double step = (double)diffY2/(double)diffX2;
+ double stepSmall1 = (double)diffX1/(double)diffX2;
+ double stepSmall2 = (double)diffY1/(double)diffX2;
+
+ for(int s = 0; s<= abs(diffX2)-1; s++){
+ 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);
+ 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);
+ }
+ }*/
- float step = (float)diffY1/(float)diffX1;
- float stepSmall1 = (float)diffX2/(float)diffX1;
- float stepSmall2 = (float)diffY2/(float)diffX1;
- lcd.printString("top",0,0);
- for(int s = 0; s<= abs(diffX1)-1; s++){
- lcd.drawLine((rint(points[0][0]+s)/points[0][2]), rint((points[0][1]+step*s)/points[0][2]), rint((points[3][0]-stepSmall1*s)/points[3][2]), rint((points[3][1]-stepSmall2*s)/points[3][2]), 0);
- lcd.drawLine((rint(points[0][0]+s+1)/points[0][2]), rint((points[0][1]+step*s)/points[0][2]), rint((points[3][0]-stepSmall1*s-1)/points[3][2]), rint((points[3][1]-stepSmall2*s)/points[3][2]), 0);
+ for (int i = 0; i < 3; i++){
- //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);
- //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);
-
+ lcd.drawLine(rint(points[i][0]*(40/points[i][2]))+42,
+ rint(points[i][1]*(40/points[i][2]))+21,
+ rint(points[i+1][0]*(40/points[i+1][2]))+42,
+ rint(points[i+1][1]*(40/points[i+1][2]))+21,
+ 1);
+
}
+ lcd.drawLine(rint(points[0][0]*(40/points[0][2]))+42,
+ rint(points[0][1]*(40/points[0][2]))+21,
+ rint(points[3][0]*(40/points[3][2]))+42,
+ rint(points[3][1]*(40/points[3][2]))+21,
+ 1);
}
- else{
- lcd.printString("bottom",0,0);
- float step = (float)diffY2/(float)diffX2;
- float stepSmall1 = (float)diffX1/(float)diffX2;
- float stepSmall2 = (float)diffY1/(float)diffX2;
-
- for(int s = 0; s<= abs(diffX2)-1; s++){
- lcd.drawLine(rint((points[0][0]-stepSmall1*s)*(40/points[0][2])), rint((points[0][1]-stepSmall2*s)*(40/points[0][2])),rint((points[3][0]+s)*(40/points[3][2])), rint((points[3][1]+step*s)*(40/points[3][2])), 0);
- lcd.drawLine(rint((points[0][0]-stepSmall1*s-1)*(40/points[0][2])), rint((points[0][1]-stepSmall2*s)*(40/points[0][2])),rint((points[3][0]+s+1)*(40/points[3][2])), rint((points[3][1]+step*s)*(40/points[3][2])), 0);
- }
- }*/
-
- for (int i = 0; i < 3; i++){
-
- lcd.drawLine(rint(points[i][0]*(40/points[i][2]))+42,
- rint(points[i][1]*(40/points[i][2]))+21,
- rint(points[i+1][0]*(40/points[i+1][2]))+42,
- rint(points[i+1][1]*(40/points[i+1][2]))+21,
- 1);
-
- }
- lcd.drawLine(rint(points[0][0]*(40/points[0][2]))+42,
- rint(points[0][1]*(40/points[0][2]))+21,
- rint(points[3][0]*(40/points[3][2]))+42,
- rint(points[3][1]*(40/points[3][2]))+21,
- 1);
}
void Rasturizer::clear(){
lcd.clear();