Ich habe das folgende Problem. Während glPolygonOffset
perfekt für Meshes funktioniert, zum Beispiel, wenn ich versuche, einen Drahtgitter-Umriss über dem Objekt zu zeichnen, funktioniert es nicht für einfache Linien.Wie zeichne ich eine Zeile übereinander in OpenGL ohne Z-Bekämpfung
Hier ist, wie es für Maschen funktioniert:
// draw object
mTexture.enableAndBind();
gl::color(Colorf(1, 1, 1));
gl::draw(mVboMesh);
mTexture.unbind();
// overlay wireframe
gl::enableWireframe();
glLineWidth(1);
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-1, -1);
glColor3f(0, 0, 1);
gl::draw(mVboMesh);
glDisable(GL_POLYGON_OFFSET_LINE);
gl::disableWireframe();
Aus irgendeinem Grund ist es nicht für Linien funktioniert. Ich versuche, die Pfeile eines Koordinatenrahmens über ein Gitter zu ziehen. Ich verwende den gleichen GL_POLYGON_OFFSET_LINE
-Modus wie beim Zeichnen von Linien, genau wie ich es für das Drahtmodell über das Objekt getan habe. Aber in diesem Fall macht glPolygonOffset(-1, -1);
absolut keinen Unterschied. Ich habe es mit riesigen Werten wie 100 probiert und es ist dasselbe. Absolut keine Wirkung. Hier ist, was ich tue:
// enable 3D rendering
gl::enable(GL_CULL_FACE);
gl::enableDepthRead();
gl::enableDepthWrite();
// drawing the grid
int size = 2000;
int step = 25;
gl::color(Colorf(0.2f, 0.2f, 0.2f));
for(float i = -size; i <= size; i += step)
{
glBegin(GL_LINES);
glVertex3f(i, 0, -size);
glVertex3f(i, 0, size);
glVertex3f(-size, 0, i);
glVertex3f(size, 0, i);
glEnd();
}
// drawing the arrows
glEnable(GL_POLYGON_OFFSET_LINE);
glPolygonOffset(-1, -1);
glBegin(GL_LINES);
gl::color(Colorf(1, 0, 0));
glVertex3f(0, 0, 0);
glVertex3f(100, 0, 0);
gl::color(Colorf(0, 1, 0));
glVertex3f(0, 0, 0);
glVertex3f(0, 100, 0);
gl::color(Colorf(0, 0, 1));
glVertex3f(0, 0, 0);
glVertex3f(0, 0, 100);
glEnd();
glDisable(GL_POLYGON_OFFSET_LINE);
// disable 3D rendering
gl::disableDepthWrite();
gl::disableDepthRead();
gl::disable(GL_CULL_FACE);
und ein Beispiel für die Z-Kämpfe ich:
Ein Hack, den ich versucht habe und was funktionierte perfekt ist:
- disable Tiefe Lese ermöglichen Tiefe Schreib
- draw grid
- Unentschieden Pfeile
- ermöglichen Tiefe
- ziehen andere Objekte
jedoch lesen Sie dies ist ein ganz besonderer Fall und während es für ein flaches Gitter und Pfeile funktioniert, wäre es nicht für so ziemlich alles andere arbeiten mit eine komplexe Form.
Meine Fragen sind:
- Warum glPolygonOffset nicht für Linien-on-Linien arbeiten, während es für die Linien-on-Polygon arbeitet?
- Wie kann ich es beheben, ohne auf den obigen Hack zurückgreifen, was nur in ganz bestimmten Fällen funktioniert?
// Ich verwende Cinder als Rahmen, aber es sollte keine Rolle spielen, da ich roh OpenGL bin mit Befehlen
aktualisieren
Ich habe die Antwort überprüft im ersten Kommentar und probierte auch diese Methode aus, allerdings funktioniert das auch nicht, da das Ergebnis von der Entfernung zur Kamera abhängt.
//// draw coordinate frame and grid
glDepthRange (0.01, 1.0);
drawGrid(2000.0f, 25.0f);
glDepthRange (0.0, 0.99);
gl::drawCoordinateFrame(100.0f, 5.0f, 2.0f);
glDepthRange (0.0, 1.0);
// draw object
mögliches Duplikat von [glPolygonOffset() Fehlern mit Linien] (http://stackoverflow.com/questions/2020451/glpolygonoffset-bugs-with- Linien) – genpfault