Also Probleme wegen deprecated hab ich ja schon angesprochen, die sind aber faktisch nicht vorhanden, denn du musst in OpenGL >= 3.0 deinem Vertex Shader sowieso die Matrizen (die Matrix) übergeben, um einen "Orthogonalen Modus" zu haben brauchst du als Projektion und Modelview nur eine Identitätsmatrix, und kannst dann ein Fullscreen Quad Zeichnen indem deine Vertizes die Koordinaten 1,1,0; -1,1,0; -1,-1,0; 1,-1,0 haben, also X und Y von -1 bis 1 haben.
Deine Perspektivische Matrix hast du demnach sowieso noch im Speicher und übergibst sie danach einfach wieder an deinen Shader für den Rest der Szene.
Du kannst das Fullscreen Quad auch im perspektivischen Modus zeichnen, dafür musst du nur die Breite/Höhe des Frustums an einer beliebigen Z-Position errechnen, dass geht folgendermaßen:
Code: public float getWidthAt(float z) { return (float) Math.tan(getFovy() * Math.PI / 360) * 2 * -z * getAspect(); } public float getHeightAt(float z) { return (float) Math.tan(getFovy() * Math.PI / 360) * 2 * -z; }
Und dann nurnoch das Quad an dieser Z-Position mit der erhaltenen Breite und Höhe zeichnen. Dafür musst du dann aber definitiv das schreiben in den Z-Puffer verhindern.
Ich empfehle aber die Methode mit den Identitätsmatrizen, die ist genauso schnell, vllt. sogar schneller als im Perspektivischen Modus zu bleiben, und neue Shader brauchst du auch nicht binden sofern dein aktueller nichts weiter macht als Projektions/ModelView Matrix mit den Vertizes zu multiplizieren und entsprechend zu texturieren.
Viele Grüße!
|