2 Stimmen

Skalieren und Drehen in OpenGL ES 2.0

Gibt es eine Möglichkeit, das Seitenverhältnis zu korrigieren, ohne Matrizen in OpenGL ES zu verwenden?

Ich schreibe einen einfachen Shader zum Drehen einer Textur.

void main()  
{  
    mat2 rotX = mat2(cosA, sinA, -sinA, cosA);  
    vec4 a_pos = a_position;
    a_pos.xy = a_position.xy * rotZ;  
    gl_Position = a_pos;  
}

Das Problem ist jedoch, dass das Bild beim Drehen verzerrt wird.
In normalem OpenGL verwenden wir etwas wie gluPerspective(fov, (float)windowWidth/(float)windowHeight, zNear, zFar);
Wie mache ich das gleiche mit Shadern?
Anmerkung: Ich würde es vorziehen, keine Matrix zu verwenden.

2voto

ZZZ Punkte 678

Fixierung des Seitenverhältnisses in der Geometrie des gerenderten Objekts einschließen? Ich habe dies in meinem Font-Rendering-Tool getan, die Position der Verts in jedem Rect wird durch das Seitenverhältnis des Bildschirms korrigiert, und ja, ich weiß, dass es besser und einfacher ist, Matrix-Fix zu verwenden, aber ich wusste es nicht, als ich dieses Tool schrieb, und es funktioniert gut:)

0voto

Yuriy Vikulov Punkte 2391

Sie können einen Code von GluPerspective manuell in einen Shader übersetzen: http://www.opengl.org/wiki/GluPerspective_code

Es ist jedoch nicht effizient, diese Matrix für jeden Scheitelpunkt zu berechnen. Sie können sie also manuell für den Bildschirm Ihres Geräts berechnen. Sehen Sie sich diese Beiträge

0voto

dirhem Punkte 611

Ändern Sie einfach die Reihenfolge der Matrixmultiplikation für die Drehung:

a_pos.xy = rotZ * a_position.xy;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X