PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SDL und GL_POINTS


Ganon
2012-03-21, 17:32:42
Heyho.

Ich habe hier ein Problem mit SDL und GL_POINTS.

Und zwar will ich eine 2D-Datenmenge punktweise zeichnen. Ich initialisiere OpenGL so:


glClearColor(0.0f, 1.0f, 0.0f, 0.0f);
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (h == 0) h = 1;
gluOrtho2D(0.0, w, h, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);


und testweise male ich einfach mal ein graues Bild:


glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);

for (uint32_t y=0; y<height; y++) {
for (uint32_t x=0; x<width; x++) {
float r = 0.5f;
float g = 0.5f;
float b = 0.5f;
glColor3f(r, g, b);
glVertex2i(x,y);
}
}
glEnd();


dann kommt als Ergebnis:

http://xenon.42degreesoffreedom.com/~matti/lines.png

Mit GLUT statt SDL tauchen die Probleme nicht auf. SDL scheint hier beim Darstellen (oder was auch immer) Spalten zu überspringen.

Hat jemand eine Idee woran das liegen kann?

edit:
Ändere ich die Auflösung, dann verschieben sich die Streifen.

Gast
2012-03-21, 19:22:17
Hast du es schon mal mit glVertex2f oder glVertex2d versucht?
Dann könntest du x ja mal nur um 0.5 (oder noch weniger) pro Schritt erhöhen, vielleicht verschwinden die grünen Linien ja dann.

Gast
2012-03-21, 19:34:28
Vielleicht ist das ein komischer Effekt wenn die Kamera an z=0 und du malst Linien auch auf z=0. Versuch mal die Linien ganz ein bisschen Richtung -z verschieben ob es dann immer noch auftritt.

Coda
2012-03-21, 20:25:59
Die Streifen die du da siehst ist dein Clear-Color, das ist dir schon klar, oder?

Das heißt deine Punkte füllen nicht den ganzen Bildschirm aus. Ändern mal glPointSize.

Gast
2012-03-21, 22:25:35
gluOrtho2D(0.0, w, h, 0.0);

sollte

gluOrtho2D(0.0, w, 0.0, h);

sein.

Coda
2012-03-21, 22:39:22
Nö. Er vertauscht damit nur die y-Achse. Das ist völlig okay.

Ganon
2012-03-21, 22:48:12
Die Streifen die du da siehst ist dein Clear-Color, das ist dir schon klar, oder?
Das heißt deine Punkte füllen nicht den ganzen Bildschirm aus. Ändern mal glPointSize.

Ja, dass das die Clear-Color ist, ist mir klar, sagte ich unten im Text ja auch.

Stelle ich Point-Size mal blind auf 1.5, dann sind die Streifen weg. Aber wie ermittelt man jetzt die nötige Größe korrekt?

gluOrtho2D(0.0, w, h, 0.0);
sollte
gluOrtho2D(0.0, w, 0.0, h);
sein.

Das dreht nur das dargestellte Koordinatensystem und ändert nix daran.

Coda
2012-03-21, 23:52:31
Stelle ich Point-Size mal blind auf 1.5, dann sind die Streifen weg. Aber wie ermittelt man jetzt die nötige Größe korrekt?
Was ist denn die "korrekte Größe"?

LupinTERZO
2012-03-24, 21:04:04
mal nebenbei:

Keine Ahnung wieso du soviele Points brauchst, aber waerst du nicht mit nem Quad in Grau besser dran?
Sollte um einiges schneller...

Ansonsten koenntest du versuchen es ueber Texturen zu regeln, die kann man lokal halten...



EDIT: PS: SDL Swap Buffer != GLUT/Vanilla OpenGL Swap Buffer
letzteres bietet Alternativen...