godotengine / godotengine/godot
Geometry2D Union generates invalid Polygon2D/Self-intersection Transitivity
- Dominant language
- C++
- Stars
- 117k
- Forks
- 26.8k
- PR merge metrics
- PR metrics pending
Description
### Tested versions
Reproducible in 4.3 and back in 3.x
### System information
Godot v4.3.stable - Windows 10.0.22631 - GLES3 (Compatibility) - NVIDIA GeForce RTX 4050 Laptop GPU (NVIDIA; 32.0.15.6070) - Intel(R) Core(TM) Ultra 7 155H (22 Threads)
### Issue description
So I've been experimenting with Polygon2D in the editor and managed to create some shapes that will disappear.
I'm not quite sure what the issue is since the polygon does not intersect itself, but if we move any of the points then it will reappear.


### Steps to reproduce
Copy these points into a Polygon2D and notice it doesn't render:
```
polygon = PackedVector2Array(450, 300, 550, 300, 550, 450, 600, 450, 600, 300, 550, 300, 550, 250, 700.68, 249, 700, 450, 700.68, 506, 449.68, 500)
```
### Minimal reproduction project (MRP)
I gave the points to the Polygon2D in reproduce steps.
Contributor guide
Research direction
Start by reproducing the issue in a Polygon2D using the points from the report, then inspect the Geometry2D union and Polygon2D paths involved in constructing and rendering the shape. Done means the supplied polygon renders correctly without producing an invalid or self-intersecting result, while preserving the existing behavior for valid polygons.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, godot
- Domain
- game-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100