Ich brauche einen Block von Pixeln aus dem Kommissionieren Puffer zu lesen, um die umgebenden Punkte auf Kollisionen geprüft, wie in der Abbildung unten:gl readPixels Koordinatensystem: lesen und prüfen, mehr als einen Punkt
ich klicken auf meiner canvas
bei x
, y
- so definieren i einen quadratischen Bereich, sagen wir mal, 11x11 Pixel, zentriert bei cX
, cY
und dann las ich von der Aufnahmepuffer nur in einem Schuss von x1
starten, y1
:
var w = 11, h = 11, cX = x, cY = cH - y, rc = ~~(0.5*w), x1 = cX - rc, y1 = cY + rc;
gl.readPixels(x1, y1, w, h, gl.RGBA, gl.UNSIGNED_BYTE, pickBuf);
Dann i vom Zentrum meines Puffers am Looping nach außen gehen, im Anschluss an den roten Pfeilen, während für eine positive Reaktion im Innern der Picking Pufferprüfung (Kollision gefunden):
function readAt(i, pickBuf) {
return pickBuf[i] << 16 | pickBuf[i+1] << 8 | pickBuf[i+2];
}
var l = rc;
while(l--) {
/* Top-Left sector */
var r = rc+(rc-l), c = l, p = r*w + c, i = 4*p;
found = readAt(i, pickBuf) > 0;
/* Top-Right sector */
var r = rc+(rc-l), c = rc+(rc-l), p = r*w + c, i = 4*p;
found = readAt(i, pickBuf) > 0;
/* Bottom-Left sector */
var r = l, c = l, p = r*w + c, i = 4*p;
found = readAt(i, pickBuf) > 0;
/* Bottom-Right sector */
var r = l, c = rc+(rc-l), p = r*w + c, i = 4*p;
found = readAt(i, pickBuf) > 0;
}
Das Stück Code funktioniert und ich kann eine Geometrie auswählen, aber jetzt glaube ich, dass ich das ganze Koordinatensystem nicht richtig verstanden habe, weil das Kollisionsergebnis immer über und links von dem Punkt liegt, an dem es sein sollte. Warum passiert das?
Es scheint mir, dass readPixels
die Bytes beginnend von der unteren linken Ecke der canvas
bis zur oberen rechten Ecke lesen sollte. Ist das wahr, oder fehlt mir etwas?
Ich bin mir bewusst, dass die gl
Koordinatensystem Y-invertiert gegen meine canvas
, also bin ich die Definition der Mitte des Picking Puffer bei cY = cH - y
und die Y Ausgangspunkt für die Kommissionierung Puffer bei y1 = cY + rc
, aber trotzdem das gibt mir falsche Ergebnisse während meines Spazierganges von der Mitte nach außen von meiner quadratischen Box. Wohin geht meine Interpretation des Koordinatensystems?
zum downvoter: bitte fair sein und eine Erklärung hinzuzufügen. Ich bin wirklich der Erste, der interessiert ist zu wissen, was ich falsch mache, indem ich diese Frage stelle. – deblocker