Ich habe gerade einen Renderer für meine Cross-Plattform-Framework (iOS und Android) mit OpenGL es gestartet. Als ich zu den Viewport-Sachen kam (was für Splitscreen-Sachen benötigt wird) und bemerkte, dass es einen Unterschied zwischen iOS und Android gibt. Hier sind zwei Bilder.glViewport anderes Ergebnis in Android und iOS
Android Es gibt tatsächlich einen anderen Fehler. Es scheint sich zu wickeln.
iOS
Meine Frage. Welcher der beiden ist richtig? Ich habe keine Transformationen angewendet, aber eins, um das gezeichnete Quad etwas zurückzubringen. glTranslatef (0.0f, 0.0f, -5.f);
Initialisation Code:
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH); //Enable Smooth Shading
glClearColor(0.f, 0.f, 0.f, 1.0f); //Black Background
glClearDepthf(1.0f); //Depth Buffer Setup
glEnable(GL_DEPTH_TEST); //Enables Depth Testing
glDepthFunc(GL_LEQUAL); //The Type Of Depth Testing To Do
//Really Nice Perspective Calculations
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
Ansichtsfenster und Projektcode
glViewport(viewportX, viewportY, viewportW, viewportH);.
glEnable(GL_SCISSOR_TEST);
glScissor(viewportX, viewportY, viewportW, viewportH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
... Und schließlich die frustrum berechnet und festgelegt glFrustrum.
float widthH = width * .1f;
float heightH = height * .1f;
glOrthof(-widthH, widthH, -heightH, heightH, .1f, 100.f);
glScalef(widthH, heightH, 1.f);
Vielleicht Android oder iOS hat es etwas von Standard: Ich habe diesen Code auch verwendet? Ich bin ahnungslos.
Ich verwende den iPhone Simulator ohne das Retina Display. Die iOS-Version sieht genau so aus wie die Version meiner App mit einem Ansichtsfenster von (1,1). Ich füge ein Bild des Vollbild-Ansichtsfensters hinzu. Der Quad ist immer noch auf den Bildschirm zentriert und nicht auf das Ansichtsfenster wie in der Android-Version. Skalierung wird das nicht lösen. – WoutervD
Der Simulator maskiert sich als Retina-Bildschirm. Dieses Problem ist offensichtlich ein Skalierungsproblem. Untersuche die beiden Grafiken und sieh zu, dass die iOS-Version + 200% skaliert ist. – Sam
Sehr seltsam. Ich benutzte auch den Scheren-Test, der das wahre Problem verdeckte. glViewport funktionierte überhaupt nicht, zumindest nicht dort, wo ich es benutzt habe. Es funktioniert jetzt gut. Habe noch ein paar GlClear-Probleme, aber ich werde sie bald aussortieren. Trotzdem danke, dass du auf das Skalieren hingewiesen hast. Als iOS gibt mir eine Größe von 480, 320 sogar mit Netzhaut an. Welches ist ein Problem. Die Sache ist. Das Zeug ist kleiner, wenn ich nicht für die Netzhaut verantwortlich bin. Scheint so, als müsste ich etwas anderes verwenden, als die richtige Auflösung zu finden ... oder sie selbst zu multiplizieren. self.view.bounds.größe.width, self.view.bounds.size.height – WoutervD