Frage

In C ++ OpenGL, mag ich manuell jedes Pixel zeichnen (als Textur Ich gehe davon aus) auf ein einfaches quadratisches primitiv oder sogar 2 Polygone ein Quadrat bilden.

Ich habe keine Ahnung, wo ich anfangen soll, oder welche Phrasen zu suchen. Ich suche für die Texturabbildung oder das Erstellen von Texturen? Die meisten Beispiele sind aus einer Datei zu laden, aber ich nicht das tun will.

Ich habe versucht, meinen OpenGL Programming Guide Buch zu lesen, aber es ist nur ein Labyrinth, wie ich OpenGL ganz neu bin. Bitte helfen.

War es hilfreich?

Lösung

Werfen Sie einen genauen Blick auf glTexImage2D. Das ist der Ruf, den das Bild in OpenGL für eine 2D-Textur lädt.

glTexImage2D nimmt tatsächlich einen rohen Zeiger auf die Pixeldaten im Bild. Sie können Speicher selbst zuweisen, und stellen Sie die Bilddaten direkt (wie Sie wollen), dann diese Funktion aufrufen um das Bild zu OpenGL zu übergeben.

Wenn Sie die Textur erstellt haben, können Sie es an den Staat binden, so dass Ihre Dreiecken, die Textur verwenden.

Es gibt nichts in OpenGL, die direkt Bilder als Texturen verwendet wird, erfordert von Dateien geladen werden. Eine gute Quelle für Texturen kann in diesem GameDev Artikel gefunden.

Andere Tipps

Wenn der Platz Sie zeichnen 2 dimensional und nicht gedreht, können Sie suchen

Sie beachten Sie, dass während glTexImage2D() einen Zeiger auf die Pixel nimmt zu laden, ist es nicht über Änderungen nach dem Aufruf dieser Daten schert. Das heißt, wirklich die Daten aus dem Speicherbereich geladen wird Sie angeben, und OpenGL erstellt eine Kopie seines eigenen.

Das bedeutet, dass, wenn sich die Daten ändern, können Sie die glTexImage2D () Aufruf entweder wieder tun, oder so etwas wie glTexSubImage2D() verwenden müssen eine teilweise Aktualisierung zu tun. Ich würde Tests und Profilierung empfehlen, um zu sehen, ob Unter Textur Aktualisierung schnell ist, nicht sicher, wie aktuelle Treiber für diesen Fall zu optimieren.

Dank Reed Copsey für den Hinweis mich in Richtung glTexImage2D . Stellt sich heraus, das ist sehr einfach; passiert nur einen Array von GLubyte zur glTexImage2D Funktion (sowie alle Funktionen erforderlich, um die Textur zu binden, etc). Haben Sie nicht genau diesen Code-Snippet versucht, aber es sollte funktionieren. Die Array-Elemente stellen eine serielle Version der Zeilen, Spalten und Kanäle.

int pixelIndex = 0;
GLubyte pixels[400];

for (int x = 0; x < 10; x++)
{
    for (int y = 0; y < 10; x++)
    {
         for (int channel = 0; channel < 4; channel++)
         {
             // 0 = black, 255 = white
             pixels[pixelIndex++] = 255;
         }
    }
}

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA, SIZE, SIZE, 0,
    GL_RGBA, GL_UNSIGNED_BYTE, pixels);

Ich habe in dem OpenGL Buch liest Sie eine 2D-Array für monochrome Bilder verwenden können, so dass ich nehme an, Sie auch ein 3D-Array nutzen könnten.

Was Sie suchen, wird allgemein als „zu Textur machen.“

http://developer.nvidia.com/object/gdc_oglrtt.html

Das Tutorial ist ziemlich alt. Ich würde vermuten, dass einige dieser Erweiterungen sind nicht wirklich Erweiterungen in neueren Versionen von OGL. Leider kann ich nicht mehr helfen. Ich arbeite nicht direkt mit Grafik-API ist viel mehr, und wenn ich es täte würde ich D3D verwenden, wenn ich könnte (die Verlängerung Suppe zu vermeiden, und aus anderen Gründen werde ich Sie nicht langweilen mit hier.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top