Commit 05b8fe2
committed
fix(recast): use chf.areas[] instead of stale spans[].area in contour building
After erode_walkable_area runs, chf.areas[i] is zeroed for eroded spans
but chf.spans[i].area retains the pre-erosion value. The contour building
code used the stale spans[i].area for area border detection, causing
RC_AREA_BORDER (0x20000) to never be set on contour vertices. This
affected simplify_contour anchor selection, changing vertex order,
triangulation, and polygon merge decisions.
Bug #27: polymesh.rs used contour.vertices[0].region instead of
contour.region for polygon region assignment.
Bug #28: merge_holes calculated winding for contours with < 3 vertices;
C++ skips these entirely.
Bug #29: All spans[i].area references in contour.rs replaced with
chf.areas[i] in walk_contour, get_corner_height, build_contours,
build_regions, and flood_fill_region.
Results after fix:
- nav_test: 537 polys, 2228 detail verts (exact C++ match, was 530/2207)
- dungeon: 216 polys (C++ 217), 866 detail verts (C++ 868), 434 tris (exact)
- bridge: exact match1 parent 8d3f787 commit 05b8fe2
File tree
5 files changed
+105
-24
lines changed- crates
- detour/tests
- recast
- src
- tests
5 files changed
+105
-24
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
143 | 143 | | |
144 | 144 | | |
145 | 145 | | |
146 | | - | |
| 146 | + | |
147 | 147 | | |
148 | | - | |
| 148 | + | |
149 | 149 | | |
150 | 150 | | |
151 | 151 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
479 | 479 | | |
480 | 480 | | |
481 | 481 | | |
482 | | - | |
| 482 | + | |
483 | 483 | | |
484 | | - | |
| 484 | + | |
485 | 485 | | |
486 | 486 | | |
487 | 487 | | |
| |||
557 | 557 | | |
558 | 558 | | |
559 | 559 | | |
560 | | - | |
561 | | - | |
562 | 560 | | |
563 | | - | |
| 561 | + | |
564 | 562 | | |
565 | 563 | | |
566 | 564 | | |
| |||
571 | 569 | | |
572 | 570 | | |
573 | 571 | | |
574 | | - | |
575 | | - | |
576 | 572 | | |
577 | | - | |
| 573 | + | |
578 | 574 | | |
579 | 575 | | |
580 | 576 | | |
| |||
731 | 727 | | |
732 | 728 | | |
733 | 729 | | |
734 | | - | |
| 730 | + | |
735 | 731 | | |
736 | 732 | | |
737 | 733 | | |
| |||
834 | 830 | | |
835 | 831 | | |
836 | 832 | | |
837 | | - | |
| 833 | + | |
838 | 834 | | |
839 | 835 | | |
840 | 836 | | |
| |||
844 | 840 | | |
845 | 841 | | |
846 | 842 | | |
847 | | - | |
| 843 | + | |
848 | 844 | | |
849 | 845 | | |
850 | 846 | | |
| |||
854 | 850 | | |
855 | 851 | | |
856 | 852 | | |
857 | | - | |
| 853 | + | |
858 | 854 | | |
859 | 855 | | |
860 | 856 | | |
| |||
868 | 864 | | |
869 | 865 | | |
870 | 866 | | |
871 | | - | |
| 867 | + | |
872 | 868 | | |
873 | 869 | | |
874 | 870 | | |
| |||
878 | 874 | | |
879 | 875 | | |
880 | 876 | | |
881 | | - | |
| 877 | + | |
882 | 878 | | |
883 | 879 | | |
884 | 880 | | |
| |||
931 | 927 | | |
932 | 928 | | |
933 | 929 | | |
934 | | - | |
| 930 | + | |
935 | 931 | | |
936 | 932 | | |
937 | 933 | | |
| |||
974 | 970 | | |
975 | 971 | | |
976 | 972 | | |
977 | | - | |
| 973 | + | |
978 | 974 | | |
979 | 975 | | |
980 | 976 | | |
| |||
1488 | 1484 | | |
1489 | 1485 | | |
1490 | 1486 | | |
1491 | | - | |
| 1487 | + | |
| 1488 | + | |
1492 | 1489 | | |
1493 | 1490 | | |
1494 | 1491 | | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
1495 | 1495 | | |
1496 | 1496 | | |
1497 | 1497 | | |
| |||
1511 | 1511 | | |
1512 | 1512 | | |
1513 | 1513 | | |
1514 | | - | |
| 1514 | + | |
| 1515 | + | |
1515 | 1516 | | |
1516 | 1517 | | |
1517 | 1518 | | |
1518 | 1519 | | |
1519 | 1520 | | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
1520 | 1524 | | |
1521 | 1525 | | |
1522 | 1526 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | | - | |
| 303 | + | |
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | | - | |
119 | | - | |
| 118 | + | |
| 119 | + | |
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
218 | 218 | | |
219 | 219 | | |
220 | 220 | | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
221 | 232 | | |
222 | 233 | | |
223 | 234 | | |
| |||
257 | 268 | | |
258 | 269 | | |
259 | 270 | | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
260 | 285 | | |
261 | 286 | | |
262 | 287 | | |
| |||
279 | 304 | | |
280 | 305 | | |
281 | 306 | | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
282 | 359 | | |
283 | 360 | | |
284 | 361 | | |
| |||
0 commit comments