Mehrere Texturen OpenGL GLUT-C++
Okay noch ein paar Probleme mit ihm, das ist was ich habe, so weit:
Bitmap Display::m_HeightMap;
unsigned int Display:: textures;
Meine initialisieren Methode:
glEnable(GL_TEXTURE_2D);
Bitmap image[2];
GLuint *textures = new GLuint[2];
glGenTextures(1, textures);
glGenTextures(2, textures);
image[0].loadBMP("myTexture.bmp");
image[1].loadBMP("myOtherTexture.bmp");
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image.width, image.height, GL_RGB, GL_UNSIGNED_BYTE, image.data);
Die obige Zeile gibt einen Fehler: der linke .Daten müssen Klasse/Struktur/union
glDisable(GL_TEXTURE_2D);
Draw-Methode:
void Draw()
{
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS); //TOP
glBindTexture(GL_TEXTURE_2D, textures[0]);
glNormal3f(0,1,0);
glColor4f(1,1,1,0);
//glColor3d(0.5,0.40,0.05);
glTexCoord2f(0.0f,0.0f);
glVertex3f(-4.5, 0.3, 2);//bottom left
glTexCoord2f(1.0f,0.0f);
glVertex3f(-4.5, 0.3, 2.5);//bottom right
glTexCoord2f(1.0f,1.0f);
glVertex3f(4.5, 0.3, 2.5);//top right
glTexCoord2f(0.0f,1.0f);
glVertex3f(4.5, 0.3, 2);//top left
glEnd();
glDisable(GL_TEXTURE_2D);
}
Einzige problem hier ist, dass die textur nicht definiert ist.
Eine Letzte Sache, hoffentlich!
void loadTexture(GLuint texture, const char* filename)
{
Bitmap image;
Bitmap image[2];
image[0].loadBMP("myTexture.bmp"); <=== error
image[1].loadBMP("myTexture2.bmp"); <=== error
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE , GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, image.width, image.height, GL_RGB, GL_UNSIGNED_BYTE,
Bild.Daten);
}
Wenn ich versuchen und laden mehrere bitmaps bekomme ich 7 errors,
error C2040: image:'Bitmap [2]' unterscheidet sich in der Ebene der Dereferenzierung von 'Bitmap'
Fehler C2088: '[' illegal für die Klasse (doppelt)
error C2228: Links von .BMP muss Klasse/Struktur/union (doppelt)
kein operator "[]" entspricht diesen Operanden (zweimal)
Du musst angemeldet sein, um einen Kommentar abzugeben.
So.
glGenTextures
nimmt zwei Parameter. Einint
, und einGLuint*
. Dieint
sagt GL-wie viele Texturen zu erzeugen, und dieGLuint*
ist ein array vonGLuint
s (wo zum generieren der Texturen). Der Grund, warum Sie das folgende tun...ist, weil man nur eine textur. Wenn Sie mehr als eine haben, würden Sie dies tun:
Diese Weise, sagen Sie GL ich will zum generieren von n Texturen, und hier ist ein array mit zugewiesenem Platz für mindestens ebenso viele Texturen.
Sagen, Sie wollen beide nutzen, in deiner draw-Schleife, die Sie umsetzen würden, dass wie diese:
Stellen Sie sicher, dass
delete textures;
am Ende Ihres Programms, um richtig zu reinigen, nachdem die Zuweisung dieses Raumes.Gibt es auch Möglichkeiten, nicht zu binden separate Texturen. Sie können Sie verwenden, was heißt ein "texture atlas". Im Grunde ist das eine bitmap enthält, die mehrere sub-Bilder. So dass Sie nur generieren und binden eine bitmap, und verwenden Sie separate Teile.
Umgang mit mehreren bitmaps, dies zu tun:
Folgen Sie dann den Prozess zum erzeugen einer bitmap für beide bitmaps.
Alles, was unterhalb dieser Linie ist, reagiert auf den aktualisierten Frage.
Diese sollten so ziemlich tun, was Sie zu tun versuchen.
Einige der Probleme, die Sie aufzeigen, sind nicht gerade das, OpenGL verwandt, aber Sie sind mehr C/C++ verwandt. Ich weiß, das ist nicht die Antwort, die du suchst, aber es würde wahrscheinlich helfen Ihnen eine Menge zu lernen über C-Funktionen, Zeiger, arrays, etc, und verbringen Sie einen festen Monat und arbeiten eng mit den Funktionen/Pointer/arrays, bevor Sie sich auf so etwas wie OpenGL, das erfordert eine ziemlich moderate Verständnis von C.
const GLsizei n = (Anzahl der Texturen hier);
GLuint textureIDs = new GLuint[ n ];
glGenTextures( n, textureIDs );
Ich nehme an, du meinst die Sie wollen, zu generieren, die mehrere Texturen und speichert die id in ein array? Sie können tun, wie diese:
Sobald Sie das getan haben, einfach in einer Schleife durch Ihre Texturen und für jedes, binden, festlegen von Parametern, laden von Bild-Daten, etc.
Möchten Sie möglicherweise erstellen Sie Ihre textur-array auf dem heap, so können Sie den Zugriff auf die textur-IDs später:
Nur sicherstellen, dass löschen das array später:
delete []
.