aboutsummaryrefslogtreecommitdiff
path: root/src/o3d/tri_deriv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/o3d/tri_deriv.cpp')
-rw-r--r--src/o3d/tri_deriv.cpp138
1 files changed, 69 insertions, 69 deletions
diff --git a/src/o3d/tri_deriv.cpp b/src/o3d/tri_deriv.cpp
index 3605b51..81f60a0 100644
--- a/src/o3d/tri_deriv.cpp
+++ b/src/o3d/tri_deriv.cpp
@@ -1,18 +1,18 @@
-#include "o3d/tri_deriv_vertex.h"
+#include "o3d/tri_deriv.h"
#include <vector>
#include "math/vector.h"
#include "o3d/deriv_vertex.h"
using namespace engine::o3d;
-TriangleDerivedVertex4::TriangleDerivedVertex4(DerivedVertex4 derived_vertex1, DerivedVertex4 derived_vertex2, DerivedVertex4 derived_vertex3)
+TriangleDerived::TriangleDerived(DerivedVertex derived_vertex1, DerivedVertex derived_vertex2, DerivedVertex derived_vertex3)
: derived_vertex1{derived_vertex1}, derived_vertex2{derived_vertex2}, derived_vertex3{derived_vertex3} {
}
#define P1_OUT 1
#define P2_OUT 2
#define P3_OUT 4
-static void _perspective_crop_x(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVertex4 t, int n, float x) {
+static void _perspective_crop_x(std::vector<TriangleDerived>& tris, TriangleDerived t, int n, float x) {
switch (n) {
case 0:
tris.push_back(t);
@@ -24,9 +24,9 @@ static void _perspective_crop_x(std::vector<TriangleDerivedVertex4>& tris, Trian
case P1_OUT | P3_OUT:
case P1_OUT | P2_OUT:
{
- DerivedVertex4* q1;
- DerivedVertex4* q2;
- DerivedVertex4* q3;
+ DerivedVertex* q1;
+ DerivedVertex* q2;
+ DerivedVertex* q3;
switch (n) {
case P1_OUT:
case P2_OUT | P3_OUT:
@@ -47,29 +47,29 @@ static void _perspective_crop_x(std::vector<TriangleDerivedVertex4>& tris, Trian
q3 = &t.derived_vertex1;
break;
}
- engine::math::Vector4 dq2 = q1->point - q2->point;
- float fac2 = (x - q2->point.x) / dq2.x;
- float r2w = 1.f / (fac2 / q1->point.w + (1.f - fac2) / q2->point.w);
- float fac2_b = r2w * fac2 / q1->point.w;
- DerivedVertex4 r2{
+ engine::math::Vector4 dq2 = q1->vertex - q2->vertex;
+ float fac2 = (x - q2->vertex.x) / dq2.x;
+ float r2w = 1.f / (fac2 / q1->vertex.w + (1.f - fac2) / q2->vertex.w);
+ float fac2_b = r2w * fac2 / q1->vertex.w;
+ DerivedVertex r2{
{
x,
- q2->point.y + fac2 * dq2.y,
- fac2_b * q1->point.z + (1.f - fac2_b) * q2->point.z,
+ q2->vertex.y + fac2 * dq2.y,
+ fac2_b * q1->vertex.z + (1.f - fac2_b) * q2->vertex.z,
r2w
},
fac2_b * q1->b0 + (1.f - fac2_b) * q2->b0,
fac2_b * q1->b1 + (1.f - fac2_b) * q2->b1
};
- engine::math::Vector4 dq3 = q1->point - q3->point;
- float fac3 = (x - q3->point.x) / dq3.x;
- float r3w = 1.f / (fac3 / q1->point.w + (1.f - fac3) / q3->point.w);
- float fac3_b = r3w * fac3 / q1->point.w;
- DerivedVertex4 r3{
+ engine::math::Vector4 dq3 = q1->vertex - q3->vertex;
+ float fac3 = (x - q3->vertex.x) / dq3.x;
+ float r3w = 1.f / (fac3 / q1->vertex.w + (1.f - fac3) / q3->vertex.w);
+ float fac3_b = r3w * fac3 / q1->vertex.w;
+ DerivedVertex r3{
{
x,
- q3->point.y + fac3 * dq3.y,
- fac3_b * q1->point.z + (1.f - fac3_b) * q3->point.z,
+ q3->vertex.y + fac3 * dq3.y,
+ fac3_b * q1->vertex.z + (1.f - fac3_b) * q3->vertex.z,
r3w
},
fac3_b * q1->b0 + (1.f - fac3_b) * q3->b0,
@@ -105,7 +105,7 @@ static void _perspective_crop_x(std::vector<TriangleDerivedVertex4>& tris, Trian
}
}
-static void _perspective_crop_y(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVertex4 t, int n, float y) {
+static void _perspective_crop_y(std::vector<TriangleDerived>& tris, TriangleDerived t, int n, float y) {
switch (n) {
case 0:
tris.push_back(t);
@@ -117,9 +117,9 @@ static void _perspective_crop_y(std::vector<TriangleDerivedVertex4>& tris, Trian
case P1_OUT | P3_OUT:
case P1_OUT | P2_OUT:
{
- DerivedVertex4* q1;
- DerivedVertex4* q2;
- DerivedVertex4* q3;
+ DerivedVertex* q1;
+ DerivedVertex* q2;
+ DerivedVertex* q3;
switch (n) {
case P1_OUT:
case P2_OUT | P3_OUT:
@@ -140,29 +140,29 @@ static void _perspective_crop_y(std::vector<TriangleDerivedVertex4>& tris, Trian
q3 = &t.derived_vertex1;
break;
}
- engine::math::Vector4 dq2 = q1->point - q2->point;
- float fac2 = (y - q2->point.y) / dq2.y;
- float r2w = 1.f / (fac2 / q1->point.w + (1.f - fac2) / q2->point.w);
- float fac2_b = r2w * fac2 / q1->point.w;
- DerivedVertex4 r2{
+ engine::math::Vector4 dq2 = q1->vertex - q2->vertex;
+ float fac2 = (y - q2->vertex.y) / dq2.y;
+ float r2w = 1.f / (fac2 / q1->vertex.w + (1.f - fac2) / q2->vertex.w);
+ float fac2_b = r2w * fac2 / q1->vertex.w;
+ DerivedVertex r2{
{
- q2->point.x + fac2 * dq2.x,
+ q2->vertex.x + fac2 * dq2.x,
y,
- fac2_b * q1->point.z + (1.f - fac2_b) * q2->point.z,
+ fac2_b * q1->vertex.z + (1.f - fac2_b) * q2->vertex.z,
r2w
},
fac2_b * q1->b0 + (1.f - fac2_b) * q2->b0,
fac2_b * q1->b1 + (1.f - fac2_b) * q2->b1
};
- engine::math::Vector4 dq3 = q1->point - q3->point;
- float fac3 = (y - q3->point.y) / dq3.y;
- float r3w = 1.f / (fac3 / q1->point.w + (1.f - fac3) / q3->point.w);
- float fac3_b = r3w * fac3 / q1->point.w;
- DerivedVertex4 r3{
+ engine::math::Vector4 dq3 = q1->vertex - q3->vertex;
+ float fac3 = (y - q3->vertex.y) / dq3.y;
+ float r3w = 1.f / (fac3 / q1->vertex.w + (1.f - fac3) / q3->vertex.w);
+ float fac3_b = r3w * fac3 / q1->vertex.w;
+ DerivedVertex r3{
{
- q3->point.x + fac3 * dq3.x,
+ q3->vertex.x + fac3 * dq3.x,
y,
- fac3_b * q1->point.z + (1.f - fac3_b) * q3->point.z,
+ fac3_b * q1->vertex.z + (1.f - fac3_b) * q3->vertex.z,
r3w
},
fac3_b * q1->b0 + (1.f - fac3_b) * q3->b0,
@@ -198,24 +198,24 @@ static void _perspective_crop_y(std::vector<TriangleDerivedVertex4>& tris, Trian
}
}
-std::vector<TriangleDerivedVertex4> TriangleDerivedVertex4::perspective_crop_xy_out(float x1, float x2, float y1, float y2) const {
- std::vector<TriangleDerivedVertex4> tris_final;
- std::vector<TriangleDerivedVertex4> tris1;
- _perspective_crop_x(tris1, *this, (derived_vertex1.point.x < x1) | ((derived_vertex2.point.x < x1) << 1) | ((derived_vertex3.point.x < x1) << 2), x1);
+std::vector<TriangleDerived> TriangleDerived::perspective_crop_xy_out(float x1, float x2, float y1, float y2) const {
+ std::vector<TriangleDerived> tris_final;
+ std::vector<TriangleDerived> tris1;
+ _perspective_crop_x(tris1, *this, (derived_vertex1.vertex.x < x1) | ((derived_vertex2.vertex.x < x1) << 1) | ((derived_vertex3.vertex.x < x1) << 2), x1);
for (auto t1 : tris1) {
- std::vector<TriangleDerivedVertex4> tris2;
- _perspective_crop_x(tris2, t1, (t1.derived_vertex1.point.x > x2) | ((t1.derived_vertex2.point.x > x2) << 1) | ((t1.derived_vertex3.point.x > x2) << 2), x2);
+ std::vector<TriangleDerived> tris2;
+ _perspective_crop_x(tris2, t1, (t1.derived_vertex1.vertex.x > x2) | ((t1.derived_vertex2.vertex.x > x2) << 1) | ((t1.derived_vertex3.vertex.x > x2) << 2), x2);
for (auto t2 : tris2) {
- std::vector<TriangleDerivedVertex4> tris3;
- _perspective_crop_y(tris3, t2, (t2.derived_vertex1.point.y < y1) | ((t2.derived_vertex2.point.y < y1) << 1) | ((t2.derived_vertex3.point.y < y1) << 2), y1);
+ std::vector<TriangleDerived> tris3;
+ _perspective_crop_y(tris3, t2, (t2.derived_vertex1.vertex.y < y1) | ((t2.derived_vertex2.vertex.y < y1) << 1) | ((t2.derived_vertex3.vertex.y < y1) << 2), y1);
for (auto t3 : tris3)
- _perspective_crop_y(tris_final, t3, (t3.derived_vertex1.point.y > y2) | ((t3.derived_vertex2.point.y > y2) << 1) | ((t3.derived_vertex3.point.y > y2) << 2), y2);
+ _perspective_crop_y(tris_final, t3, (t3.derived_vertex1.vertex.y > y2) | ((t3.derived_vertex2.vertex.y > y2) << 1) | ((t3.derived_vertex3.vertex.y > y2) << 2), y2);
}
}
return tris_final;
}
-static void _crop_z(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVertex4 t, int n, float z) {
+static void _crop_z(std::vector<TriangleDerived>& tris, TriangleDerived t, int n, float z) {
switch (n) {
case 0:
tris.push_back(t);
@@ -227,9 +227,9 @@ static void _crop_z(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVe
case P1_OUT | P3_OUT:
case P1_OUT | P2_OUT:
{
- DerivedVertex4* q1;
- DerivedVertex4* q2;
- DerivedVertex4* q3;
+ DerivedVertex* q1;
+ DerivedVertex* q2;
+ DerivedVertex* q3;
switch (n) {
case P1_OUT:
case P2_OUT | P3_OUT:
@@ -250,26 +250,26 @@ static void _crop_z(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVe
q3 = &t.derived_vertex1;
break;
}
- engine::math::Vector4 dq2 = q1->point - q2->point;
- float fac2 = (z - q2->point.z) / dq2.z;
- DerivedVertex4 r2{
+ engine::math::Vector4 dq2 = q1->vertex - q2->vertex;
+ float fac2 = (z - q2->vertex.z) / dq2.z;
+ DerivedVertex r2{
{
- q2->point.x + fac2 * dq2.x,
- q2->point.y + fac2 * dq2.y,
+ q2->vertex.x + fac2 * dq2.x,
+ q2->vertex.y + fac2 * dq2.y,
z,
- q2->point.w + fac2 * dq2.w
+ q2->vertex.w + fac2 * dq2.w
},
fac2 * q1->b0 + (1.f - fac2) * q2->b0,
fac2 * q1->b1 + (1.f - fac2) * q2->b1
};
- engine::math::Vector4 dq3 = q1->point - q3->point;
- float fac3 = (z - q3->point.z) / dq3.z;
- DerivedVertex4 r3{
+ engine::math::Vector4 dq3 = q1->vertex - q3->vertex;
+ float fac3 = (z - q3->vertex.z) / dq3.z;
+ DerivedVertex r3{
{
- q3->point.x + fac3 * dq3.x,
- q3->point.y + fac3 * dq3.y,
+ q3->vertex.x + fac3 * dq3.x,
+ q3->vertex.y + fac3 * dq3.y,
z,
- q3->point.w + fac3 * dq3.w
+ q3->vertex.w + fac3 * dq3.w
},
fac3 * q1->b0 + (1.f - fac3) * q3->b0,
fac3 * q1->b1 + (1.f - fac3) * q3->b1
@@ -304,18 +304,18 @@ static void _crop_z(std::vector<TriangleDerivedVertex4>& tris, TriangleDerivedVe
}
}
-std::vector<TriangleDerivedVertex4> TriangleDerivedVertex4::crop_z_out(float z1, float z2) const {
- std::vector<TriangleDerivedVertex4> tris;
- _crop_z(tris, *this, (derived_vertex1.point.z < z1) | ((derived_vertex2.point.z < z1) << 1) | ((derived_vertex3.point.z < z1) << 2), z1);
- std::vector<TriangleDerivedVertex4> tris2;
+std::vector<TriangleDerived> TriangleDerived::crop_z_out(float z1, float z2) const {
+ std::vector<TriangleDerived> tris;
+ _crop_z(tris, *this, (derived_vertex1.vertex.z < z1) | ((derived_vertex2.vertex.z < z1) << 1) | ((derived_vertex3.vertex.z < z1) << 2), z1);
+ std::vector<TriangleDerived> tris2;
for (auto t : tris)
- _crop_z(tris2, t, (t.derived_vertex1.point.z > z2) | ((t.derived_vertex2.point.z > z2) << 1) | ((t.derived_vertex3.point.z > z2) << 2), z2);
+ _crop_z(tris2, t, (t.derived_vertex1.vertex.z > z2) | ((t.derived_vertex2.vertex.z > z2) << 1) | ((t.derived_vertex3.vertex.z > z2) << 2), z2);
return tris2;
}
#undef P1_OUT
#undef P2_OUT
#undef P3_OUT
-TriangleDerivedVertex4 TriangleDerivedVertex4::div_by_w() const {
+TriangleDerived TriangleDerived::div_by_w() const {
return {derived_vertex1.div_by_w(), derived_vertex2.div_by_w(), derived_vertex3.div_by_w()};
}