OpenGL ES 1.1 / Android - Das Textur-Mapping-zum-Quadrat-Debakel des Jahres 2011

8

Ich versuche, eine Textur auf ein Quadrat zu zeichnen, wo sich die Textur auf das Quadrat ausdehnt. Momentan wird die Textur gemappt, aber sie wird nicht dem richtigen Ort zugeordnet, und OGL führt eine Verzerrung oder eine solche aus, die mir unbekannt ist. Das Bild ist 64x64 und die Quadrate, die ich ausprobiert habe, sind von -2 bis 2 (hor und ver) und -1 bis 1. Hier ist das Bild:

Der Texturcode lautet:

%Vor%

und der Code für das Rendering ist:

%Vor%

Und das Quadrat:

%Vor%

Ich verwende eine Orthoperspektive %Code% . Ich habe drawArrays () ausprobiert, was keinen Unterschied macht, und auch viele Kombinationen von gl.glOrthof(-windowRatio, windowRatio, -1,1, -4, 4) . Das Problem scheint zweifach zu sein: (1) das Bild dehnt sich nicht passend aus und (2) nur das linke Dreieck des Quadrats gibt die Textur korrekt wieder. Etwas, das mir aufgefallen ist, ist, dass sich das Ändern der Texturkoordinaten nicht auf das Bild auswirkt. Wie bekomme ich das wie geplant? Danke fürs Schauen.

    
farm ostrich 16.05.2011, 17:07
quelle

1 Antwort

4

Sie verwenden GL_TEXTURE_COORD_ARRAY als Pufferbindungspunkt. Das ist einfach falsch. Die glTexCoordPointer bezieht ihre Daten von der aktuellen GL_ARRAY_BUFFER , wie die glVertexPointer . Also im ersten Teil ersetzen

%Vor%

von

%Vor%

und ersetzen Sie im Rendering-Code

%Vor%

von

%Vor%

Dies funktioniert, weil die gl...Pointer -Befehle ihre Daten aus dem Puffer übernehmen, der zum Zeitpunkt des Aufrufs an GL_ARRAY_BUFFER gebunden ist. Wählen Sie einfach den passenden Puffer, dann rufen Sie gl...Pointer auf und dann können Sie einen weiteren Puffer an GL_ARRAY_BUFFER binden (aber der Indexpuffer muss natürlich an GL_ELEMENT_ARRAY_BUFFER gebunden sein, wenn Sie glDrawElements aufrufen. Aber wie Tommy bereits erwähnt hat in einem Kommentar könntest du auch einfach auf den trivialen Indexpuffer und mit glDrawArrays ) verzichten.

Da der Aufruf von glBindBuffer(GL_TEXTURE_COORD_ARRAY, ...) fehlschlägt (da GL_TEXTURE_COORD_ARRAY kein gültiger Bindungspunkt ist), bleibt der Vertex-Puffer beim Festlegen des Texcoord-Zeigers gebunden. Da Sie jedoch angeben, dass Ihre Scheitelpunkte 3 Komponenten und Ihre Texcoords 2 haben, erhalten Sie { 1f, 1f, 0f, 1f, -1f, 0f, -1f, 1f } als Texturkoordinaten (die ersten acht Werte Ihres Scheitelpunkt-Arrays). So wie Sie Ihr Array als

rendern %Vor%

Sie erhalten als Textur coords:

%Vor%

Nachdem Sie die vorgeschlagenen Änderungen vorgenommen haben, erhalten Sie

%Vor%

So wird Ihre Textur immer noch horizontal und vertikal umgedreht (ich weiß nicht, ob das beabsichtigt ist). Sie müssen sicherstellen, dass Ihre Textrue-Koordinaten Ihren Scheitelpunkten entsprechen. Aber nachdem Sie Ihren oben erwähnten Pufferfehler geändert haben, sollte es zumindest ein bisschen schöner aussehen.

    
Christian Rau 22.05.2011, 21:44
quelle