Vad är OpenGL® Picking?

OpenGL®-plockning i datorprogrammering är processen att bestämma vilket objekt inom en tredimensionell (3D) scen som finns vid en given punkt på skärmen när scenen har renderats. Det kan också hänvisa till att lokalisera flera objekt vid en punkt eller inuti en ruta. Oftast används OpenGL®-plockning för att bestämma vilket 3D-objekt på skärmen en användare försöker välja med en muspekare. Även om den här operationen kan tyckas vara enkel, finns det flera subtiliteter i hur OpenGL® renderar en scen som kan göra den ganska komplex. Dessutom finns det inneboende fel i vissa grafikkort och drivrutiner som kan göra att OpenGL®-plockningsfunktionen misslyckas och returnerar falska resultat.

När en användare tittar på en 3D-scen på en datorskärm kallas den resulterande bilden en rendering av scenen. Scenen är faktiskt lagrad i minnet som en samling primitiva former eller polygoner, som i sig bara är samlingar av 3D-punkter inom scenens utrymme. Datorn använder världskoordinater, som ibland kallas absoluta koordinater, för att utföra de flesta grundläggande funktioner som manipulerar objekt i scenen. I de flesta applikationer kan användaren manövrera bilden av scenen till olika vinklar så att objekt kan ses i olika perspektiv. Den virtuella platsen för användaren inom scenen kallas kameravinkel eller kameraposition.

Komplexiteten i OpenGL®-plockning kommer från att bestämma musens placering på den tvådimensionella (2D) skärmen från en möjligen godtycklig position och vinkel inom scenen, kamerapositionen. Dessutom, eftersom renderingen från den mänskliga betraktarens perspektiv verkligen är 2D, finns det inget sätt för användaren att ge djupet av musklicket inuti scenen. OpenGL®-plockfunktionen löser detta komplexa problem på två sätt.

Den första är att istället för att utföra en serie separata beräkningar för att översätta var betraktaren är abstrakt och sedan hitta ett objekt i renderingsfönstret, återger funktionen faktiskt scenen som den gör när den normalt arbetar, med undantag för att renderingen användes eftersom urval inte visas, används det endast för att beräkna rätt positioner för objekt. Skillnaden är att istället för att återge hela området som skulle vara synligt för användaren, återger det bara området där musen är placerad. Detta innebär att alla objekt som renderas tekniskt sett är på den punkt där muspekaren är placerad.

Det andra problemet, nämligen att inte ha något sätt att indikera djupet på ett valt område, löses genom att returnera alla objekt som finns under muskoordinaterna i scenen. OpenGL®-plockfunktionen returnerar alla objekt i en array tillsammans med hur långt bort de är från betraktarens plats. Detta gör att ett program snabbt kan hitta det närmaste objektet om så önskas.

Ett sätt att visualisera OpenGL®-plockning är att föreställa sig en linje, ibland kallad en stråle i 3D-programmering, som rör sig från platsen för muspekaren in i scenen och bort från betraktarens plats. Varje objekt som denna stråle berör läggs till en rad objekt, tillsammans med hur långt borta det är från betraktaren. Detta är en mycket enkel förklaring av hur en form av OpenGL®-plockning fungerar.
En annan metod för objektplockning i OpenGL® innebär att lokalisera ett objekt efter färg, och det kan vara betydligt snabbare. Denna metod återger scenen, men istället för att applicera ljus och textur på objekten, återges de istället med en enda enkel färg. Varje objekt eller grupp av objekt har sin egen distinkta färg. Scenen renderas endast i minnet och visas inte, så detta påverkar inte vad användaren ser. Istället för att leta efter 3D-kollisioner mellan objekt, returneras färgen vid muspekarens position istället, och den färgen kommer att korrelera med ett specifikt objekt.