Na vele pogingen begin ik het bijna op te geven, maar omdat ik erg veel interesse heb in het vinden van een oplossing doe ik nog even een laatste poging.
Mijn doel is om uit te vinden hoe ik een cirkel in de 3d ruimte onder de muiscursor kan detecteren. Na een eerste indruk lijkt dit niet zo moeilijk; je kan bijvoorbeeld een lijn/ray van onder de muis de 3d ruimte inschieten, de cirkel voorstellen als een plane en die gebruiken om de lijn of ray op te projecteren. Daarna maak je een lokale ruimte aan op de plane, kan je in die ruimte een semi-2d test doen om te controleren welk punt op de cirkel het dichtst bij het geprojecteerde punt ligt en na een transformatie terug naar world space en de projectie terug naar 2d coordinaten kan dan uiteindelijk worden gecontroleerd hoeveel pixels de twee punten van elkaar af liggen. Liggen ze dicht genoeg bij elkaar, dan is er een hit.
Maar dit werkt niet echt, want de cirkel moet bv ook van de zijkant te detecteren zijn. En de rays van onder de muiscursor schieten daar vrolijk langs zonder ooit de plane waar de cirkel in ligt op te merken, want dat ding is oneindig flinterdun.
Voor een lijn in de 3d ruimte is het simpel (projecteer de 2 lijnpunten naar 2d en zoek uit of een punt in de buurt van dat 2d lijnsegment ligt - zie ook dit), maar een cirkel is blijkbaar wat (veel) moeilijker...
Zijn hier misschien mensen die zoiets ook wel eens hebben gedaan en weten hoe ik dit handig op kan lossen?
Als allerlaatste poging zou ik nog heel simpel de segmenten van de cirkel (zoals deze ook getekend wordt via OpenGL) kunnen gebruiken om diezelfde lijntests op uit te voeren, maar ik vind dat eigenlijk een beetje vies. En hoe groter de cirkel in 2d getekend wordt, hoe meer tests er gedaan moeten worden, wat ook niet handig is.
Mijn doel is om uit te vinden hoe ik een cirkel in de 3d ruimte onder de muiscursor kan detecteren. Na een eerste indruk lijkt dit niet zo moeilijk; je kan bijvoorbeeld een lijn/ray van onder de muis de 3d ruimte inschieten, de cirkel voorstellen als een plane en die gebruiken om de lijn of ray op te projecteren. Daarna maak je een lokale ruimte aan op de plane, kan je in die ruimte een semi-2d test doen om te controleren welk punt op de cirkel het dichtst bij het geprojecteerde punt ligt en na een transformatie terug naar world space en de projectie terug naar 2d coordinaten kan dan uiteindelijk worden gecontroleerd hoeveel pixels de twee punten van elkaar af liggen. Liggen ze dicht genoeg bij elkaar, dan is er een hit.
Maar dit werkt niet echt, want de cirkel moet bv ook van de zijkant te detecteren zijn. En de rays van onder de muiscursor schieten daar vrolijk langs zonder ooit de plane waar de cirkel in ligt op te merken, want dat ding is oneindig flinterdun.
Voor een lijn in de 3d ruimte is het simpel (projecteer de 2 lijnpunten naar 2d en zoek uit of een punt in de buurt van dat 2d lijnsegment ligt - zie ook dit), maar een cirkel is blijkbaar wat (veel) moeilijker...
Zijn hier misschien mensen die zoiets ook wel eens hebben gedaan en weten hoe ik dit handig op kan lossen?
Als allerlaatste poging zou ik nog heel simpel de segmenten van de cirkel (zoals deze ook getekend wordt via OpenGL) kunnen gebruiken om diezelfde lijntests op uit te voeren, maar ik vind dat eigenlijk een beetje vies. En hoe groter de cirkel in 2d getekend wordt, hoe meer tests er gedaan moeten worden, wat ook niet handig is.
Dat zit wel Schnorr.