Hi !
Ja die Texture wird geladen.
Sobald ich für die 2 Textureebene das Koordinatenpaar 0 einsetze wird sie auch wunderbar angezeigt.
pD3DDevice->SetTextureStageState (1,D3DTSS_TEXCOORDINDEX,0); --> OK
pD3DDevice->SetTextureStageState (1,D3DTSS_TEXCOORDINDEX,1); --> keine Anzeige
Auch solche utopischen Dinge wie D3DTSS_TCI_CAMERASPACEPOSITION funktionieren einwandfrei.
Es hat so den Anschein, als würde nur der Texel der unter den TextKoordinaten 0,0 liegt über meine Primitiven gesetzt bzw. die Koordinatenpaare für die 2 Texture (stbVector2 vTexture1; siehe unten)aus dem Vertex nicht richtig ausgelesen, so dass sie alle 0 sind.
Ich vermute es, da die 2. Texture bei den Koordinaten 0,0 blau ist, und meine primitiven so einen gewissen Blauschimmer erhalten. :?
Ich verwende folgendes Vertexformat:
struct E1TVertex
{
stbVector3 vPos; //normaler 3DVector xyz
DWORD dColor;
stbVector2 vTexture; //normaler 2DVector xy
stbVector2 vTexture1;
};
der Vertexbuffer:
pD3DDevice->CreateVertexBuffer (8 * (sizeof(E1TVertex)),0,D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX2,D3DPOOL_MANAGED,&pD3DVertexBuf,NULL))
Setzen der Texturen:
pD3DDevice->SetTexture (0,pD3DTexPl1);
pD3DDevice->SetTexture (1,pD3DTexPl5);
Die StageStates:
pD3DDevice->SetTextureStageState (1,D3DTSS_TEXCOORDINDEX,1);
-------------------------------------------------------------
pD3DDevice->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_MODULATE);
pD3DDevice->SetTextureStageState (0,D3DTSS_COLORARG1,D3DTA_CURRENT);
pD3DDevice->SetTextureStageState (0,D3DTSS_COLORARG2,D3DTA_TEXTURE);
--------------------------------------------------------------
pD3DDevice->SetTextureStageState (1,D3DTSS_COLORARG1,D3DTA_DIFFUSE);
pD3DDevice->SetTextureStageState (1,D3DTSS_COLORARG2,D3DTA_TEXTURE);
pD3DDevice->SetTextureStageState (1,D3DTSS_COLOROP,D3DTOP_MODULATE);
Habe hier D3DTA_DIFFUSE gewählt weil ich nur die zweite Textur sehen wollte.
---------------------------------------------------------------
Desweiteren habe ich auch noch am VertexBuffer folgende Änderung, jedoch ohne Erfolg durchgeführt:
pD3DDevice->CreateVertexBuffer (8 * (sizeof(E1TVertex)),0,D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1 | D3DFVF_TEX2,D3DPOOL_MANAGED,&pD3DVertexBuf,NULL))
Also statt nur D3DFVF_TEX2 --> D3DFVF_TEX1 | D3DFVF_TEX2 angegeben.
Mittlerweile habe ich mir das Kapitel über Multitexturing in der 2.Auflage 3D-Spiele-programmierung von David Scherfgen bestimmt schon 20 mal durchgelesen - aber wie gesagt ohne Erfolg.
Ich hoffe du kannst mir da irgendwie weiterhelfen.
Gruss