mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-11-26 15:26:12 +01:00
fixed cdt fill
This commit is contained in:
parent
81265ea832
commit
e5da8e98c8
@ -85,7 +85,7 @@ class Poly2TriDemo extends BasicGame("Poly2Tri") {
|
|||||||
val strange = "data/strange.dat"
|
val strange = "data/strange.dat"
|
||||||
val i18 = "data/i.18"
|
val i18 = "data/i.18"
|
||||||
|
|
||||||
var currentModel = star
|
var currentModel = nazcaMonkey
|
||||||
|
|
||||||
def init(container: GameContainer) {
|
def init(container: GameContainer) {
|
||||||
selectModel(currentModel)
|
selectModel(currentModel)
|
||||||
@ -125,7 +125,7 @@ class Poly2TriDemo extends BasicGame("Poly2Tri") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!debug && !drawEarClip) {
|
if(!debug && !drawEarClip && !drawCDT) {
|
||||||
var i = 0
|
var i = 0
|
||||||
for(t <- seidel.polygons) {
|
for(t <- seidel.polygons) {
|
||||||
val poly = new Polygon
|
val poly = new Polygon
|
||||||
|
@ -74,13 +74,6 @@ class AFront(iTriangle: Triangle) {
|
|||||||
node.triangle = triangle
|
node.triangle = triangle
|
||||||
}
|
}
|
||||||
|
|
||||||
def -==(tuple: Tuple3[Node, Node, Triangle]) {
|
|
||||||
val (node, kNode, triangle) = tuple
|
|
||||||
kNode.prev.next = node
|
|
||||||
node.prev = kNode.prev
|
|
||||||
node.prev.triangle = triangle
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Node(val point: Point, var triangle: Triangle) {
|
class Node(val point: Point, var triangle: Triangle) {
|
||||||
|
@ -158,47 +158,40 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
|
|||||||
|
|
||||||
def march(n: Node) {
|
def march(n: Node) {
|
||||||
|
|
||||||
var node = n
|
var node = n.next
|
||||||
/*
|
|
||||||
// Update right
|
// Update right
|
||||||
if(node.next != aFront.tail) {
|
if(node.next != null) {
|
||||||
var a = (node.point - node.next.point)
|
|
||||||
var b = (node.next.next.point - node.next.point)
|
|
||||||
var angle = Math.atan2(a cross b, a dot b)
|
|
||||||
while(node != aFront.tail && angle > -Math.Pi*0.5f) {
|
|
||||||
if(angle >= -Math.Pi*0.5f) {
|
|
||||||
val points = Array(node.next.point, node.next.next.point, node.point)
|
|
||||||
val neighbors = Array(null, node.triangle, node.next.triangle)
|
|
||||||
val triangle = new Triangle(points, neighbors)
|
|
||||||
mesh.map += triangle
|
|
||||||
aFront -= (node, node.next, triangle)
|
|
||||||
}
|
|
||||||
node = node.next
|
|
||||||
a = (node.point - node.next.point)
|
|
||||||
b = (node.next.next.point - node.next.point)
|
|
||||||
angle = Math.atan2(a cross b, a dot b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
node = n
|
|
||||||
|
|
||||||
// Update left
|
|
||||||
if(node.prev != aFront.head) {
|
|
||||||
var angle = 0.0
|
var angle = 0.0
|
||||||
while(node != aFront.head.next && angle < Math.Pi*0.5f) {
|
do {
|
||||||
val a = (node.point - node.prev.point)
|
angle = fill(node)
|
||||||
val b = (node.prev.prev.point - node.prev.point)
|
node = node.next
|
||||||
angle = Math.abs(Math.atan2(a cross b, a dot b))
|
} while(angle <= Math.Pi*0.5 && node.next != null)
|
||||||
if(angle <= Math.Pi*0.5f) {
|
|
||||||
val points = Array(node.prev.point, node.prev.prev.point, node.point)
|
|
||||||
val neighbors = Array(null, node.triangle, node.prev.triangle)
|
|
||||||
val triangle = new Triangle(points, neighbors)
|
|
||||||
mesh.map += triangle
|
|
||||||
aFront -== (node, node.prev, triangle)
|
|
||||||
}
|
|
||||||
node = node.prev
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node = n.prev
|
||||||
|
// Update left
|
||||||
|
if(node.prev != null) {
|
||||||
|
var angle = 0.0
|
||||||
|
do {
|
||||||
|
angle = fill(node)
|
||||||
|
node = node.prev
|
||||||
|
} while(angle <= Math.Pi*0.5f && node.prev != null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def fill(node: Node) = {
|
||||||
|
|
||||||
|
val a = (node.prev.point - node.point)
|
||||||
|
val b = (node.next.point - node.point)
|
||||||
|
val angle = Math.abs(Math.atan2(a cross b, a dot b))
|
||||||
|
if(angle <= Math.Pi*0.5f) {
|
||||||
|
val points = Array(node.point, node.next.point, node.prev.point)
|
||||||
|
val neighbors = Array(null, node.prev.triangle, node.triangle)
|
||||||
|
val triangle = new Triangle(points, neighbors)
|
||||||
|
mesh.map += triangle
|
||||||
|
aFront -= (node.prev, node, triangle)
|
||||||
|
}
|
||||||
|
angle
|
||||||
}
|
}
|
||||||
|
|
||||||
private def finalization {
|
private def finalization {
|
||||||
|
Loading…
Reference in New Issue
Block a user