Berechnen Sie die drei Ecken Ihres Fov-Dreiecks, drehen Sie sie so, dass sie in die richtige Richtung weisen, und führen Sie dann einen der folgenden Schritte aus:
1) Führen Sie einen Punkt-in-Dreieck-Test für alle potenziellen Ziele durch
2) Berechnen Sie den Begrenzungsrahmen dieses Dreiecks und führen Sie einen Punkt-in-Dreieck-Test für alle potenziellen Ziele in Zellen in diesem Begrenzungsrahmen durch. Dies ist ein sehr einfacher Code zum Debuggen
Ein ähnlicher Ansatz besteht darin, einen Quadtree anstelle eines Gitters zu verwenden und die Schnittpunkte darauf zu erstellen. Wenn der Zugriff auf die O (1) -Kachel Sie beschleunigt, sollte es so schnell wie möglich sein, alle Zellen in den Grenzen des Fov-Dreiecks auf In-Dreieck zu testen. Wenn Sie sich andere Optionen ansehen, gehe ich davon aus, dass dies nicht der Fall ist und dass O (1) tatsächlich massive Cache-Fehlkosten verursacht, wenn Sie Ihren Cache verprügeln. Sie können sich natürlich auch die Anweisungen zum Vorabrufen ansehen, um Ihren Begrenzungsrahmen-Spaziergang mit ...
3) "rastern" Sie dieses Dreieck und überprüfen Sie die Zellen, die es "malt" - wahrscheinlich der effizienteste Code, aber vielleicht nur am Rande, da ich spekulieren würde, dass alles von Cache-Fehlzeiten dominiert wird und davon abhängt, wie komplex Ihre Zellen sind und wie beschäftigt Sie sind.
Ein alternativer Ansatz besteht darin, das Sichtfeld in eine Bitmap außerhalb des Bildschirms zu rendern und dann den Pixelwert für jedes Ihrer Objekte zu lesen. Sie können Farbe nicht „entmischen“, aber mit einer begrenzten Anzahl von Objekten. Durch sorgfältige Auswahl Ihrer Farbe können Sie ableiten, wer wen gesehen hat. Dieser Ansatz ähnelt der Anzahl der Spiele, auf die der Benutzer geklickt hat. Er zeichnet die Szene außerhalb des Bildschirms mit Volltonfarben für die Trefferbereiche. GPUs sind bei Dreiecksfüllung sehr schnell ...