glClipPlane funktioniert nicht



  • Hi,

    ich versuche gerade ein Clipping-Plane ans laufen zu bekommen. Allerdings funktioniert mein Code nicht

    GLdouble clippingPlane[4] = {0.0, 0.0, 1.0, 0.0};
    glClipPlane(GL_CLIP_PLANE0, clippingPlane);
    glEnable(GL_CLIP_PLANE0);
    // rendern
    glDisable(GL_CLIP_PLANE0);
    

    Zuerst hat glClipPlane() den Fehler GL_INVALID_OPERATION ausgegeben. Ich vermute, dass es daran liegt, dass es deprecated ist. Dann habe ich in GLFW in das Kompatibilitäts-Profil gewechselt mit

    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
    

    Dadurch hat glClipPlane() zumindest schonmal keinen Fehler mehr produziert. Das Clippen an sicht funktioniert leider immer noch nicht.
    Weiß jemand woran das liegen könnte? Oder gibt es eine andere Methode "global" zu clippen, also ohne jedne einzelnen Shader zu modifizieren?



  • Ich habe mich mal näher mit dem Thema beschäftigt und habe herausgefunden, dass glClipPlane so nie funktionieren wird, da die fixed-function-pipeline von den Shadern überschrieben wird. Wie man im Shader clipped ist mir auch klar. Allerdings habe ich noch nicht rausgefunden, wie ich das global anstellen soll. Wie kann ich irgendwie an jeden x-beliebigen Shader den Clippingtest anhängen?



  • Im Pixelshader einfach das Pixel mit discard verwerfen? Wäre jetzt mein Ansatz



  • Lightning33 schrieb:

    Wie kann ich irgendwie an jeden x-beliebigen Shader den Clippingtest anhängen?

    Du musst in jedem Program, für das du Clipping haben willst, im Vertex Shader die entsprechenden Werte in gl_ClipDistance[i] ausgeben...



  • Und wenn ich die gesamte Szene clippen will, gibt es da keine bessere möglichkeit als in jedem einzelnen Shader das clipping zu machen? Das wäre ja ein riesen Rückschritt im Gegensatz zu glClipPlane.....



  • Lightning33 schrieb:

    Und wenn ich die gesamte Szene clippen will, gibt es da keine bessere möglichkeit als in jedem einzelnen Shader das clipping zu machen?

    nope, gibt es nicht...



  • Aber wenn ich Objekte render, auf dessen Shader ich keinen Zugriff habe muss ich diese doch trotzdem clippen können... Ich glaube kaum, dass OpenGL einem diese Möglichkeit nicht bietet.



  • Wie genau willst du Objekte rendern, ohne "auf deren Shader Zugriff zu haben"?



  • Wenn ich z.B. irgendein Programm habe, was für mich eine große Blackbox ist. Diesem Programm kann man RenderNodes anhängen, die jede für sich gerendert wird. Wenn ich nun aber nur eine bestimme RenderNode programmiere und alle anderen schon gegeben sind und so für mich auch eine Blackbox darstellen muss ich dennoch die Möglichkeit haben die ganze Scene zu clippen?!



  • Lightning33 schrieb:

    Wenn ich nun aber nur eine bestimme RenderNode programmiere und alle anderen schon gegeben sind und so für mich auch eine Blackbox darstellen muss ich dennoch die Möglichkeit haben die ganze Scene zu clippen?!

    Wenn deine Blackbox diese Funktionalität nicht bietet, dann wird das wohl eher schwierig werden...


Anmelden zum Antworten