OpenGL GL_LINES Endpunkte nicht an
Ich habe Probleme mit der GL_LINES block... die Zeilen im folgenden Beispiel nicht verbinden an den enden (auch wenn es manchmal zufällig entscheidet, um eine Verbindung einer Ecke oder zwei). Stattdessen werden die Endpunkte innerhalb von 1 pixel in einer anderen (aus einer Ecke, die nicht vollständig squared; wenn das Sinn macht). Es ist ein einfacher block zum zeichnen ein solides 1-pixel-Rechteck.
glBegin(GL_LINES);
glColor3b(cr, cg, cb);
glVertex3i(pRect->left, pRect->top, 0);
glVertex3i(pRect->right, pRect->top, 0);
glVertex3i(pRect->right, pRect->top, 0);
glVertex3i(pRect->right, pRect->bottom, 0);
glVertex3i(pRect->right, pRect->bottom, 0);
glVertex3i(pRect->left, pRect->bottom, 0);
glVertex3i(pRect->left, pRect->bottom, 0);
glVertex3i(pRect->left, pRect->top, 0);
glEnd();
Dem folgenden Beispiel scheint das problem zu beheben, gibt mir scharfe, eckige Ecken, aber ich kann es nicht akzeptieren, weil ich weiß nicht, warum es auf diese Weise handeln...
glBegin(GL_LINES);
glColor3b(cr, cg, cb);
glVertex3i(pRect->left, pRect->top, 0);
glVertex3i(pRect->right + 1, pRect->top, 0);
glVertex3i(pRect->right, pRect->top, 0);
glVertex3i(pRect->right, pRect->bottom + 1, 0);
glVertex3i(pRect->right, pRect->bottom, 0);
glVertex3i(pRect->left - 1, pRect->bottom, 0);
glVertex3i(pRect->left, pRect->bottom, 0);
glVertex3i(pRect->left, pRect->top - 1, 0);
glEnd();
Jedem OpenGL Programmierer gibt, die helfen kann, würde ich mich freuen 🙂
Dem Bild ist ein Zoom-in Ansicht einen screenshot. Wie Sie sehen können, die Obere linke Ecke ist nicht angeschlossen. Der oberen rechten Ecke ist. Nicht zu sehen sind unten Links und rechts, die nicht miteinander verbunden sind.
Viewport-setup ist eine 1 zu 1 pixel pro koordinieren.
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, __nRendererWidth, __nRendererHeight, 0, -1, 100);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glEnable (GL_TEXTURE_2D);
- Screenshot? Alle anderen relevanten GL-setup code?
- Welche video-Treiber verwenden Sie? Dieser sieht aus wie ein bug, wenn es wirkt sich auf
GL_LINE_LOOP
als gut. - ATI OpenGL 6.14.10.9704..., die Verknüpfung zu der Standard-opengl32.lib mit Visual Studio 2008
- Ich lief auf meine Freundin, die computer... Sie hat auch eine ATI display-Treiber, und es Tat das gleiche auf Ihr... ich bin zu versuchen, es auf einem nVidia display
- Gleich auf nVidia... mich verrückt
- ok... was ist die Linienbreite eingestellt? (
glLineWidth
- Funktion) Wirkt sich eine änderung gib es unterschiedliche Ergebnisse? - Sie haben Texturierung aktiviert beim zeichnen der Linien?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Frage 14.090 der OpenGL-FAQ:
Dann aus Abschnitt 3.5 der OpenGL Core Profile-Spezifikation:
So, die Antwort ist die Angabe nicht erforderlich-Linien, die verbunden werden, als Sie vielleicht erwarten. Wenn Ihre Linien wurden alle x-Dur oder alle y-major, dann Regel #4 oben geben würde, Sie den erwarteten Ausgang, aber in Ihrem Rechteck, Sie sind abwechselnd in x-Dur-und die y-major-Linien.
Wenn Sie gewährleisten wollen, verbunden mit Linien ohne Lücken oder überschneidungen kommen kann, sollten Sie das Rendern mit
GL_LINE_LOOP
(oderGL_LINE_STRIP
für eine verbundene Serie, die noch nicht zu Ende, wo es beginnt) stattGL_LINES
.Da Sie mit der Zeichnung eines geschlossenen Polygons, die Sie möglicherweise verwenden möchten
GL_LINE_LOOP
statt.Im Ergebnis, ist es am besten zeichnen Sie die Linien mit GL_QUADS. Nicht so einfach ist wie mit GL_LINES, aber es funktioniert:
Konnte ich es nicht lösen vollständig, aber diese links waren ein bisschen Hilfe für alle, die mit dem gleichen problem... ich erkannte, es ist ein breites problem, das viele Menschen erleben (und es ist eine Schande, so eine mächtige Bibliothek macht es so schwierig, auszuführen, wie eine primitive Operationen wie das zeichnen einer Linie mit pixel-Einheit, Präzision).
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Anzahl=235566
http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Anzahl=237621