2016-04-03 12 views
1

Ich bin neu in der Grafikprogrammierung. Ich versuche mit glDrawPixels zu zeichnen, aber mein Programm hat keine Ausgaben. Ich recherchierte online und ich bekomme verschiedene Antworten auf welche Daten ich in glDrawPixels weitergeben sollte. Ich habe data[w*h*3], data[w*h][3] und data[w][h][3] gesehen, die die beste ist?c - openGL glDrawPixels

Bisher ich meine Speicherung RGB-Werte unter der Anzeigefunktion:

float pixels[1024][768][3]; 
int i,j; 

//Should give me all red 
for (i = 0; i < 768; i++) { 
    for (j = 0; j < 1024; j++) { 
    pixels[j][i][0] = 255.0; 
    pixels[j][i][1] = 0.0; 
    pixels[j][i][2] = 0.0; 
    } 
} 
glDrawPixels(1024,768,GL_RGB,GL_FLOAT,pixels); 

mein Hauptprogramm:

int main(int argc, char** argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_RGBA | GLUT_DOUBLE); 
    glutInitWindowSize (1024, 768); 
    glutCreateWindow (argv[0]); 

    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 

Der Ausgang ich habe ist nur ein leeres Fenster, was ist Ich mache falsch?

Vielen Dank im Voraus.

Antwort

2

Sie müssen angeben, wo die Pixel innerhalb des Ansichtsfensters platziert werden sollen (das ist das gleiche wie Ihr Fenster, vorausgesetzt, dass Sie Ihre Angaben gemacht haben).

Versuchen Sie, glWindowPos2i(0, 0) anrufen, bevor Sie glDrawPixels anrufen. Dies sollte die so genannte Rasterposition in der unteren linken Ecke des Fensters positionieren.

In Bezug auf Ihre Frage nach der besten Deklaration Ihrer Pixel, sind alle vorgeschlagenen Formulare ausreichend, da sie eine ansteckende Speichermatrix zum Speichern Ihrer Pixeldaten erstellen. Die unterschiedliche Anzahl von Dimensionen in dem Array, das Sie deklarieren, wirkt sich nur darauf aus, wie Sie in das Array indizieren.

+0

leider hinzufügen glWindowPos2i (0,0) vor glDrawPixels funktioniert nicht. Mein Fenster ist immer noch leer (weiß) – user3335341

+0

Zuerst tauschen Sie Ihre Puffer nach dem Rendern? Das heißt, da Sie in Ihrer Zeile 'glutInitDisplayMode'' GLUT_DOUBLE' angegeben haben, müssen Sie die Puffer am Ende des Renderings durch Aufruf von 'glutSwapBuffers' vertauschen. Wenn Sie 'GL_FLOAT' als Typ für' glDrawPixels' verwenden, ist der maximale Farbwert 1,0. Kein Problem hier; nur dass deine Werte auf 1.0 geklemmt werden. – radical7

+0

Was ist der beste Typ für die Daten? meinst du auch, wenn ich rot will, wird es rgb (1 0 0) sein? – user3335341