2010-12-17 22 views
1

Ich versuche, eine einfache Kommissionierfunktion mit glReadPixels zu implementieren, aber wenn ich auf ein Objekt mit 1 Farbe klicke, bekomme ich unterschiedliche Werte, je nachdem, wo ich auf dieses Objekt geklickt habe? Es gibt keine spezielle Beleuchtung usw.? Was ist los? Manchmal werden alle Nullen zurückgegeben. Ich habe alles ausgeschaltet (Texturen etc.), aber immer noch keine Freude.iPhone OpenGL ES: glReadPixels funktioniert nicht

Ich dachte, diese Funktion gibt die Farbe des Pixels, auf das Sie klicken, zurück?

- (void)getPixelColour:(CGPoint)point { 

    Byte pixelColour[4]; 
    glReadPixels(point.x, point.y, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, &pixelColour); 

    NSLog(@"%d %d %d", pixelColour[0], pixelColour[1], pixelColour[2]); 

} 

Update: hat dieses Bild um es zu beheben:

glGetIntegerv(GL_VIEWPORT, __viewport); 
point.y = (float)__viewport[3] - point.y; 
+4

Ist Ihr CGPoint in Touch-Koordinaten? Rendern Sie OpenGL auf den Kopf? Denken Sie daran, dass OpenGL von unten nach oben rendert und Berührungen von oben nach unten kommen. –

+0

Guter Punkt, ja cgpoint ist der Berührungspunkt, also muss ich ihn irgendwie invertieren? – Burf2000

+0

Ed Veröffentlichen Sie Ihren Kommentar als Antwort und helfen Sie, das Problem zu beheben! – Burf2000

Antwort

1

glGetIntegerv (GL_VIEWPORT, _ Ansichtsfenster);
point.y = (Gleitkommazahl)
_viewport [3] - point.y;

Verwandte Themen