MeshParser.hx 808 B

12345678910111213141516171819202122
  1. package arm.format;
  2. import iron.math.Vec4;
  3. class MeshParser {
  4. public static function pnpoly(v0x: Float, v0y: Float, v1x: Float, v1y: Float, v2x: Float, v2y: Float, px: Float, py: Float): Bool {
  5. // https://wrf.ecse.rpi.edu//Research/Short_Notes/pnpoly.html
  6. var c = false;
  7. if (((v0y > py) != (v2y > py)) && (px < (v2x - v0x) * (py - v0y) / (v2y - v0y) + v0x)) c = !c;
  8. if (((v1y > py) != (v0y > py)) && (px < (v0x - v1x) * (py - v1y) / (v0y - v1y) + v1x)) c = !c;
  9. if (((v2y > py) != (v1y > py)) && (px < (v1x - v2x) * (py - v2y) / (v1y - v2y) + v2x)) c = !c;
  10. return c;
  11. }
  12. public static function calcNormal(p0: Vec4, p1: Vec4, p2: Vec4): Vec4 {
  13. var cb = new iron.math.Vec4().subvecs(p2, p1);
  14. var ab = new iron.math.Vec4().subvecs(p0, p1);
  15. cb.cross(ab);
  16. cb.normalize();
  17. return cb;
  18. }
  19. }