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.
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
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
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.