Ich verwende Three.js, um 3D-Modelle auf einem Webgl-Canvas-Renderer über einfache DOM-Elemente zu zeichnen, und ich brauche, um Kollisionserkennung zwischen ihnen zu tun. Meine derzeit funktionierende Methode ist Renderer.domElement.toDataURL() zu verwenden, laden Sie diese als ein imageData-Objekt dann zeichnen Sie diese auf einen separaten 2D-Canvas-Kontext, dann ziehen Sie die getImageData() Pixel-Array und iterieren durch mit diese geniale Pixelkollisionsfunktion .
Dies ist unglaublich langsam und drückt meine Bildrate auf fast unspielbare ~5-8 FPS. Ohne diese Hit Detection bekomme ich etwa 40-50 FPS.
Ich vermute, dass der Grund für die Verlangsamung die unglaublich unhandliche toDataURL()->load image->drawImage()->getImageData() .
Meine Frage ist: Gibt es einen besseren Weg, um die abgeflachten 2D-Pixeldaten auf der WebGL Leinwand zugreifen? oder vielleicht eine bessere Methode zur Extrapolation meiner 3D-Objektkoordinaten ohne Parallaxe? Ehrlich gesagt, jede Möglichkeit, eine Art von Kollisionserkennung schneller als ich es derzeit tun wird immens nützlich sein.
エディトリアル : die Funktion WebGL context.readPixels() großartig und ist superschnell im Vergleich zu meiner vorherigen Lösung. Es sollte jedoch beachtet werden, dass das Datenfeld von oben nach unten gespiegelt wird, verglichen mit einem normalen Bildpixel-Datenfeld. Ich habe einfach meine Kollisionsroutine Y-Wert-Prüfung umgedreht und dies zum Funktionieren gebracht, obwohl andere möglicherweise auf kompliziertere Weise gestolpert werden. Viel Erfolg!