Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

17.06.2009, 17:52

Problem mit Multitexturing

Hallo,

ich habe eben erste fest gestellt, dass meine Engine mit OpenGL und Direct3D9 nur zwei Texturen auf ein Objekt legen kann.
Bei OpenGL wird nur die erste und letzte Textur angezeigt und bei Direct3D9 nur die ersten beiden Texturen.

Mit OpenGL aktiviere ich die Texturen wie folgt:

C-/C++-Quelltext

1
2
3
4
glActiveTextureARB(GL_TEXTURE0_ARB + TextureLayer);
glClientActiveTextureARB(GL_TEXTURE0_ARB + TextureLayer);
glBindTexture(GL_TEXTURE_2D, TexID);
glEnable(GL_TEXTURE_2D);

Kann mir jemand sagen warum das bei mir nicht richtig funktioniert??

EDIT:
Also mit Direct3D9 klappt's doch, aber mit OpenGL habe ich immer noch das Problem.
Allerdings sehe ich die 'fehlenden' Texturen, wenn ich SphereMapping aktivieren - jedoch ist das SphereMapping nicht richtig für alle Texture Layer die nach dem ersten folgen (index > 1)

3dcoder

Frischling

Beiträge: 40

Wohnort: Krefeld

  • Private Nachricht senden

2

18.06.2009, 11:39

Hi!

Ist sichergestellt, dass TexID die korrekte Textur-ID enthält?

Setzt du auch die richtigen Texturkoordinaten mit glMultiTexCoord bzw. über einen Vertex Buffer mit glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY) und glTexCoordPointer(...)?

Ich aktiviere die Texturen folgendermassen (zusammenkopiert - daher nicht logisch, aber die OpenGL Aufrufe sind ja wichtig hier):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
        glActiveTexture(GL.GL_TEXTURE0 + getUnitId());
        glClientActiveTexture(GL.GL_TEXTURE0 + getUnitId());

        glBindTexture(GL.GL_TEXTURE_2D, texture.getGlTexId());
        glTexEnvf(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, texEnvMode);
        glTexEnvfv(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_COLOR, texEnvColor);
        glEnable(GL.GL_TEXTURE_2D);

        glActiveTexture(GL.GL_TEXTURE0 + getUnitId());
        glClientActiveTexture(GL.GL_TEXTURE0 + getUnitId());
        glEnableClientState(GL.GL_TEXTURE_COORD_ARRAY);
        glTexCoordPointer(2, GL.GL_FLOAT, .....);


Vielleicht bringt dich das auf eine Idee...

Grüße
Stefan

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

18.06.2009, 17:55

hallo,

du warst mir eine große Hilfe =)

ich habe "glEnableClientState(GL_TEXTURE_COORD_ARRAY);" nur einmal VOR der Texture Aktivierung aufgerufen. Das muss aber nach JEDEM "glClientActiveTexture(GL_TEXTURE0 + Layer);" gemacht werden.

Vielen Dank für deine Hilfe!

Werbeanzeige