J'essaie de faire un effet "lampe de poche" dans mon jeu où le joueur ne peut voir que les endroits qui sont dans sa ligne de mire. J'ai la plupart de l'effet fait par raycasting à chaque sommet dans le monde du jeu et raycasts ajoutés et extra + -0.0001 rad, puis les reliant dans le sens horaire pour former this shape in red. J'essaie d'obtenir l'inverse de ce polygone dans les limites du niveau rectangulaire similaire à l'option "Inverse Selection" dans des programmes comme Photoshop (example)Algorithme d'inversion d'un polygone dans un rectangle?
0
A
Répondre
0
Construire un ensemble pour rectangle et polygone et calculer le symmetric difference (sommets dans soit rectangle ou polygone mais pas dans les deux), par exemple:
rectangle = [(0, 0), (13, 0), (13, 10), (0, 10)]
polygon = [(0, 5), (0, 10), (2, 6), (8, 6), (11, 0), (13, 0), (13, 10)]
# "^" is the symmetric difference operator in python
set(rectangle)^(set(polygon))
Retours:
set([(11, 0), (2, 6), (0, 5), (0, 0), (8, 6)])
qui correspond à la zone verte (sommets A, I, E, H, J) dans le tableau suivant:
Garde-il obtiendra le complément du polygone rouge qui ne comprend pas la intersection avec le mur dans votre image originale:
Si vous voulez que votre résultat soit le polygone jaune de la figure suivante à la place:
Ensuite, vous devrez faire une intersection rectangle polygone pour chaque mur/bloc dans la scène avec le polygone du complément en utilisant une méthode comme celles décrites dans la question suivante:
Method to detect intersection between a rectangle and a polygon?
-vous Vous voulez obtenir le polygone blanc de l'image? Ou juste le complément du rouge? – higuaro