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

1

20.12.2006, 17:41

Multitexturing (Texturecoordinaten - Problem mit Block >

Hallo Zusammen !

Bin gerade dabei mit Multitexturing herumzuspielen.
Doch irgendetwas mag meine Texturekoordinaten aus den Blöcken > 0 nicht.


Ich verwende fürs FVF ...XYZ | ...DIFFUSE | ...TEX2.
Das heisst jedes meiner Vertizen besitz 2 Texturekoordinaten - eins für Ebene 1 und eins für Ebene 2.

Irgendwann im späteren Programmablauf:

1. Zuweisen des TextureBlocks [0] zur TexEbene 0 und des TextureBlocks [1] zur TexEbene 1

Ergebnis: keine Textur sichtbar

2.Zuweisen des TextureBlocks [0] zur TexEbene 0 und des TextureBlocks [0] zur TexEbene 1

Ergebnis: beide Texturen je nach OP sichtbar und miteinander verheiratet


Es sieht also so aus, als werden die Koordinaten aus dem zweiten TextKoordinatenblock nicht beachtet - oder wie auch immer.

Wer hätte vielleicht eine Idee woran dies liegen kann.
(Vielleicht am FVF ? Benötigt man einen Normalenvector für Multitexturing)

mfg





[/cpp]

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

20.12.2006, 18:07

hi!

man braucht keinen normalvektor für multitexturing.

wird deine 2te textur auch geladen?
zeig etwas mehr code (deine TextureStageStates zb.) und deine vertex struct...

3

21.12.2006, 01:27

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

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

21.12.2006, 12:26

hm

nur um sicher zu gehen, du setzt dein FVF schon oder (SetFVF())?
und vTexture1 hat auch sicher die werte die es haben soll (also nicht einfach überall 0)?

5

21.12.2006, 23:49

Arrgh

Vielen Dank für den Tip mit SetFVF(....);

Es war ein typischer Schussligkeitsfehler von mir. :oops:

Habe da irgendeine Function in irgendeiner Library die ein Parameter für das FVF erwartet und diesen mit SetFVF() auch setzen soll.
Hatte das FVF auch richtig übergeben.

Aber anstatt den Parameter in die Function SetFVF() einzusetzen, hatte ich dort die FVF Flags fix gecodet.

Also trotzdem vielen Dank für die Unterstützung.

Wünsche noch ein Frohes Fest und 'nen guten Rutsch.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

21.12.2006, 23:58

immer gerne ;)

Zitat von »"Jensemann"«

Wünsche noch ein Frohes Fest und 'nen guten Rutsch.


ebenfalls :)

Werbeanzeige