Browse Source

barycentric -> olivec_barycentric

rexim 2 years ago
parent
commit
c594e050d6
3 changed files with 12 additions and 12 deletions
  1. 1 1
      demos/cup3d.c
  2. 10 10
      olive.c
  3. 1 1
      tools/viewobj.c

+ 1 - 1
demos/cup3d.c

@@ -89,7 +89,7 @@ Olivec_Canvas render(float dt)
             for (int y = ly; y <= hy; ++y) {
                 for (int x = lx; x <= hx; ++x) {
                     int u1, u2, det;
-                    barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                    olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                     int u3 = det - u1 - u2;
                     if ((OLIVEC_SIGN(int, u1) == OLIVEC_SIGN(int, det) || u1 == 0) && (OLIVEC_SIGN(int, u2) == OLIVEC_SIGN(int, det) || u2 == 0) && (OLIVEC_SIGN(int, u3) == OLIVEC_SIGN(int, det) || u3 == 0)) {
                         float z = 1/v1.z*u1/det + 1/v2.z*u2/det + 1/v3.z*u3/det;

+ 10 - 10
olive.c

@@ -339,6 +339,8 @@ OLIVECDEF void olivec_frame(Olivec_Canvas oc, int x, int y, int w, int h, size_t
 OLIVECDEF void olivec_circle(Olivec_Canvas oc, int cx, int cy, int r, uint32_t color);
 // TODO: lines with different thiccness
 OLIVECDEF void olivec_line(Olivec_Canvas oc, int x1, int y1, int x2, int y2, uint32_t color);
+OLIVECDEF bool olivec_normalize_triangle(size_t width, size_t height, int x1, int y1, int x2, int y2, int x3, int y3, int *lx, int *hx, int *ly, int *hy);
+OLIVECDEF void olivec_barycentric(int x1, int y1, int x2, int y2, int x3, int y3, int xp, int yp, int *u1, int *u2, int *det);
 OLIVECDEF void olivec_triangle(Olivec_Canvas oc, int x1, int y1, int x2, int y2, int x3, int y3, uint32_t color);
 OLIVECDEF void olivec_triangle3c(Olivec_Canvas oc, int x1, int y1, int x2, int y2, int x3, int y3, uint32_t c1, uint32_t c2, uint32_t c3);
 OLIVECDEF void olivec_triangle3z(Olivec_Canvas oc, int x1, int y1, int x2, int y2, int x3, int y3, float z1, float z2, float z3);
@@ -618,14 +620,12 @@ OLIVECDEF uint32_t mix_colors3(uint32_t c1, uint32_t c2, uint32_t c3, int u1, in
 }
 
 // NOTE: we imply u3 = det - u1 - u2
-OLIVECDEF void barycentric(int x1, int y1, int x2, int y2, int x3, int y3,
-                           int xp, int yp,
-                           int *u1, int *u2, int *det)
+OLIVECDEF void olivec_barycentric(int x1, int y1, int x2, int y2, int x3, int y3, int xp, int yp, int *u1, int *u2, int *det)
 {
     *det = ((x1 - x3)*(y2 - y3) - (x2 - x3)*(y1 - y3));
     *u1  = ((y2 - y3)*(xp - x3) + (x3 - x2)*(yp - y3));
     *u2  = ((y3 - y1)*(xp - x3) + (x1 - x3)*(yp - y3));
-    // u3 = det - u1 - u2
+
 }
 
 OLIVECDEF bool olivec_normalize_triangle(size_t width, size_t height, int x1, int y1, int x2, int y2, int x3, int y3, int *lx, int *hx, int *ly, int *hy)
@@ -663,7 +663,7 @@ OLIVECDEF void olivec_triangle3c(Olivec_Canvas oc, int x1, int y1, int x2, int y
         for (int y = ly; y <= hy; ++y) {
             for (int x = lx; x <= hx; ++x) {
                 int u1, u2, det;
-                barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                 int u3 = det - u1 - u2;
                 if (
                     (OLIVEC_SIGN(int, u1) == OLIVEC_SIGN(int, det) || u1 == 0) &&
@@ -711,7 +711,7 @@ OLIVECDEF void olivec_triangle3z(Olivec_Canvas oc, int x1, int y1, int x2, int y
             for (int x = s1; x <= s2; ++x) {
                 if (0 <= x && (size_t) x < oc.width) {
                     int u1, u2, det;
-                    barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                    olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                     float z = z1*u1/det + z2*u2/det + z3*(det - u1 - u2)/det;
                     OLIVEC_PIXEL(oc, x, y) = *(uint32_t*)&z;
                 }
@@ -732,7 +732,7 @@ OLIVECDEF void olivec_triangle3z(Olivec_Canvas oc, int x1, int y1, int x2, int y
             for (int x = s1; x <= s2; ++x) {
                 if (0 <= x && (size_t) x < oc.width) {
                     int u1, u2, det;
-                    barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                    olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                     float z = z1*u1/det + z2*u2/det + z3*(det - u1 - u2)/det;
                     OLIVEC_PIXEL(oc, x, y) = *(uint32_t*)&z;
                 }
@@ -778,7 +778,7 @@ OLIVECDEF void olivec_triangle3uv(Olivec_Canvas oc, int x1, int y1, int x2, int
             for (int x = s1; x <= s2; ++x) {
                 if (0 <= x && (size_t) x < oc.width) {
                     int u1, u2, det;
-                    barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                    olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                     int u3 = det - u1 - u2;
                     float z = z1*u1/det + z2*u2/det + z3*(det - u1 - u2)/det;
                     Uv uv = olivec_uv(
@@ -810,7 +810,7 @@ OLIVECDEF void olivec_triangle3uv(Olivec_Canvas oc, int x1, int y1, int x2, int
             for (int x = s1; x <= s2; ++x) {
                 if (0 <= x && (size_t) x < oc.width) {
                     int u1, u2, det;
-                    barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                    olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                     int u3 = det - u1 - u2;
                     float z = z1*u1/det + z2*u2/det + z3*(det - u1 - u2)/det;
                     Uv uv = olivec_uv(
@@ -838,7 +838,7 @@ OLIVECDEF void olivec_triangle(Olivec_Canvas oc, int x1, int y1, int x2, int y2,
         for (int y = ly; y <= hy; ++y) {
             for (int x = lx; x <= hx; ++x) {
                 int u1, u2, det;
-                barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
+                olivec_barycentric(x1, y1, x2, y2, x3, y3, x, y, &u1, &u2, &det);
                 int u3 = det - u1 - u2;
                 if (
                     (OLIVEC_SIGN(int, u1) == OLIVEC_SIGN(int, det) || u1 == 0) &&

+ 1 - 1
tools/viewobj.c

@@ -257,7 +257,7 @@ int main(int argc, char **argv)
             for (int y = ly; y <= hy; ++y) {
                 for (int x = lx; x <= hx; ++x) {
                     int u1, u2, det;
-                    barycentric(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, x, y, &u1, &u2, &det);
+                    olivec_barycentric(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, x, y, &u1, &u2, &det);
                     int u3 = det - u1 - u2;
                     if (
                         (OLIVEC_SIGN(int, u1) == OLIVEC_SIGN(int, det) || u1 == 0) &&