Du bist nicht angemeldet.

1

Montag, 26. Juli 2010, 21:03

Textur wird nicht angezeigt!

moin wider ein problem
(allg. ist mein problem dass dot nich da ist und schon seit 2 tagen vermisst wird -.-)

ALso will ne simple Textur aufn Squad knallen, daher mal nen paar relevante code snippets:

Vertexformat:

C-/C++-Quelltext

1
DWORD SpriteVertex::_FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;


gefüllte Vertizes:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
_Vertizes[0]._Position.x =  1;
    _Vertizes[0]._Position.y =  1;
    _Vertizes[0]._Color = D3DCOLOR_ARGB(0, 0, 0, 0);
    _Vertizes[0]._Tex.x  = 1;
    _Vertizes[0]._Tex.y  = 0;

    _Vertizes[1]._Position.x =  1;
    _Vertizes[1]._Position.y = -1;
    _Vertizes[1]._Color = D3DCOLOR_ARGB(0, 0, 0, 0);
    _Vertizes[1]._Tex.x  = 1;
    _Vertizes[1]._Tex.y  = 1;

    _Vertizes[2]._Position.x = -1;
    _Vertizes[2]._Position.y =  1;
    _Vertizes[2]._Color = D3DCOLOR_ARGB(0, 0, 0, 0);
    _Vertizes[2]._Tex.x  = 0;
    _Vertizes[2]._Tex.y  = 0;

    _Vertizes[3]._Position.x = -1;
    _Vertizes[3]._Position.y = -1;
    _Vertizes[3]._Color = D3DCOLOR_ARGB(0, 0, 0, 0);
    _Vertizes[3]._Tex.x  = 0;
    _Vertizes[3]._Tex.y  = 1;


Rendering:

C-/C++-Quelltext

1
2
3
4
5
6
        _Texture->getDevice()->SetStreamSource(0, _Buffer, 0, sizeof(SpriteVertex));
    _Texture->getDevice()->SetFVF(SpriteVertex::_FVF);
    _Texture->getDevice()->SetTexture(0, _Texture->getTexture());
    _Texture->getDevice()->BeginScene();
    _Texture->getDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, _Vertizes, sizeof(SpriteVertex));
    _Texture->getDevice()->EndScene();


So. Das Quad selber sehe ich bereits nur ist es entsprechend der Farbe schwarz. Was auch komisch ist, warum der Alpha Kanal keine Auswirkung auf die Farbe hat oder bin ich einfach zu blöd? Matrizen sind keine gesetzt (2D), Renderstates eben der 2D standard, Lightning aus ect.

Naja die Textur wird korrekt geladen, der Vertexbuffer stimmt auch (sonst würde ich das Squad ja nicht sehen!) aber die Textur fehlt eben. Erleuchtet mich, bin langsam schon depresiv, weil ich den verfluchten fehler nicht finde.......

mfg
Signature ftw, I'm a bad ass :D

.:!Batzer!:.

Treue Seele

Beiträge: 229

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

2

Montag, 26. Juli 2010, 21:54

Wenn du keine Matrizen benutzt musst du D3DFVF_XYZRHW(transformiert) benutzen.
z muss zwischen 0 und 1 liegen und rhw = 1

3

Montag, 26. Juli 2010, 22:03

muss ich nicht. da für sämtliche matrizen standard mäßig die identitätsmatrix gesetzt ist klappt der spaß. habs ja auch schon mehrmals probiert. außerdem kannes kaum ein matrix problem sein, weil ich dann gar nichtss ehen würde, aber mein squad wie erwartet gerendert wird nur die textur fehlt.
Signature ftw, I'm a bad ass :D

4

Montag, 26. Juli 2010, 22:06

Setz mal die Farben alle auf 1, die 0 bewirkt das der Quad mit Schwarz überzogen wird... Sowas ist mir auch mal passiert ^^ Nur das ich die Grundfarben gesehen hab, wo meine Textur "durchschimmerte"... Und das setzen auf Weiß hat die Textur dann normal dargestellt

Mfg Male

5

Montag, 26. Juli 2010, 22:21

bringt nix.
Signature ftw, I'm a bad ass :D

6

Montag, 26. Juli 2010, 22:49

Welche Größe hat die Textur? Bist du dir sicher, dass alles richtig geladen wurde?
Ein Squad ist übrigens was anderes als ein Quad. :P

Edit: Ich kenn mich mit DirectX nicht aus, aber deine Texturkoordinaten scheinen ziemlich falsch zu sein. Ok, die sind nur vertikal spiegelverkehrt...
Edit2: In OpenGL wird das so gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2f(0.f, 0.f); glVertex2f(0.f,     0.f);
    glTexCoord2f(1.f, 0.f); glVertex2f(width,   0.f);
    glTexCoord2f(0.f, 1.f); glVertex2f(0.f,     height);
    glTexCoord2f(1.f, 1.f); glVertex2f(width,   height);
glEnd();
Es gibt keinen Sinn des Lebens in einer Wüste des Daseins, wo sie dir Salzwasser zum Trinken geben

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Wollnashorn« (26. Juli 2010, 23:33)


7

Montag, 26. Juli 2010, 23:35

Hat sich wenigsten die Farbe der des SQuads geändert oder ist die Schwarz geblieben? Die Texturkoordinaten sind soweit richtig

8

Dienstag, 27. Juli 2010, 07:15

Farbe ist immernoch schwarz^^
Stimmt das ist auch komisch (PS, hab ne andere Hintergrundfarbe al Schwarz, also da wird definitiv was gezeichnet....")

Welche Größe hat die Textur? Bist du dir sicher, dass alles richtig geladen wurde?
Ein Squad ist übrigens was anderes als ein Quad. :P

Edit: Ich kenn mich mit DirectX nicht aus, aber deine Texturkoordinaten scheinen ziemlich falsch zu sein. Ok, die sind nur vertikal spiegelverkehrt...
Edit2: In OpenGL wird das so gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2f(0.f, 0.f); glVertex2f(0.f,     0.f);
    glTexCoord2f(1.f, 0.f); glVertex2f(width,   0.f);
    glTexCoord2f(0.f, 1.f); glVertex2f(0.f,     height);
    glTexCoord2f(1.f, 1.f); glVertex2f(width,   height);
glEnd();

Welche Größe hat die Textur? Bist du dir sicher, dass alles richtig geladen wurde?
Ein Squad ist übrigens was anderes als ein Quad. :P

Edit: Ich kenn mich mit DirectX nicht aus, aber deine Texturkoordinaten scheinen ziemlich falsch zu sein. Ok, die sind nur vertikal spiegelverkehrt...
Edit2: In OpenGL wird das so gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
glBegin(GL_TRIANGLE_STRIP);
    glTexCoord2f(0.f, 0.f); glVertex2f(0.f,     0.f);
    glTexCoord2f(1.f, 0.f); glVertex2f(width,   0.f);
    glTexCoord2f(0.f, 1.f); glVertex2f(0.f,     height);
    glTexCoord2f(1.f, 1.f); glVertex2f(width,   height);
glEnd();


Jo Quad meine ich :P. Und ja alles wird richtig geladen sonst gäbe es einen Crash beim setzen der Textur oder des Vertexbuffers. Habs außerdem im Debugger überprüft.

edit: Farbe ist kein Problem, Textur schon. Ist ja auch egal mit den Texturkoordinaten, es muesste enfach irgendwas anzeigen, egal ob richtig, falsch oder verzeeert, aber man sollte die Textur irgendwie erkennen, ist aber leider nicht der fall...
Signature ftw, I'm a bad ass :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »idontknow« (27. Juli 2010, 11:57)


9

Dienstag, 27. Juli 2010, 12:25

Hier ein Bild einer Watch der Textur. Sowohl Größe als auch Dateityp stimmen. Das auslesen einzelner Bits (ist eine komplett rote Textur!) erspare ich mir weils doch bissl "aufwändig" ist.
»idontknow« hat folgendes Bild angehängt:
  • TextureWatch.png
Signature ftw, I'm a bad ass :D

10

Dienstag, 27. Juli 2010, 12:54

Verwendest du Texturoperationen (Blending, SetTextureStageState...), und wenn ja, wie sehen die aus?
there's an app for that

11

Dienstag, 27. Juli 2010, 13:12

Nein benutz eig nix außer SeTTexture(...)
lern ja sonen bissl aus dem TriBase Texturen Beispiel und da habe iuch afaik auch nichts davon gefunden :)
Signature ftw, I'm a bad ass :D

12

Dienstag, 27. Juli 2010, 15:14

Ein paar Basics solltest du auf jeden Fall einbauen.

Zum Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Alphablending
Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );              
Device->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR );     
Device->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR );

// Culling
Device->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

// Licht
Device->SetRenderState( D3DRS_LIGHTING, FALSE );          // Aus

// Farboperationen, Texturen
Device->SetTextureStageState(0 , D3DTSS_COLOROP,     D3DTOP_MODULATE2X );
Device->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_DIFFUSE );
Device->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_TEXTURE );


Parameter zu den einzelnen Funktionen siehe DX-Doku oder David's Buch. ;)
there's an app for that

13

Dienstag, 27. Juli 2010, 15:18

joar klar cullmode und lightning ect habe ich ja geschrieben dass ich das eingestellt habe. werds mal mit deinen renderstates probieren, danke.

kann mir aber net vorstellen dass es dann funzt :P. weil ich ja in davids texturen beispiel nach renderstates ect gesucht habe...

edit: jop, wenn ich die mache dann sehe ich nichts mehr, außer mein quad hat ne farbe die anderst als schwarz ist, hatte eine ecke rot und die hats noch angezeigt :) den rest nicht mehr..

textur gibts auch nicht, wie "erwartet" :(
Signature ftw, I'm a bad ass :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »idontknow« (27. Juli 2010, 15:23)


14

Dienstag, 27. Juli 2010, 15:55

Ist das so gewollt:

C-/C++-Quelltext

1
D3DCOLOR_ARGB(0, 0, 0, 0);


Zumindest der Alphawert sollte doch 1 (255) sein?


Ansonsten lad das Projekt doch mal hoch.
there's an app for that

15

Dienstag, 27. Juli 2010, 16:09

Das mit dem Alpha Wert war nur zu testzwecken, habs mittlerweile schon nieder geändert :).

Ich hiff mal ich hab nix wichtiges gelöscht :P. Wollte den Ordner klein machen =)

edit: lag an der Farbe :)^^ *Gelößt* :D
Signature ftw, I'm a bad ass :D

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »idontknow« (27. Juli 2010, 18:53)


16

Dienstag, 27. Juli 2010, 18:23

edit: lag an der Farbe :)^^ *Gelößt* :D

Das hat dir doch schon Male geschrieben! Es ist doch selbstverständlich, dass bei Color(0, 0, 0) keine Textur angezeigt wird...
Es gibt keinen Sinn des Lebens in einer Wüste des Daseins, wo sie dir Salzwasser zum Trinken geben

17

Dienstag, 27. Juli 2010, 18:52

jop hab nur gebraucht bis ich verstanden habe dass er mit 1:1:1 weiß aka 255:255:255 in D3DCOLOR meint, daher war das mein Denkfehler -.-
Signature ftw, I'm a bad ass :D

18

Dienstag, 27. Juli 2010, 21:27

Die Farben zu ändern war eines der ersten Änderungen, die ich am Code durchgeführt habe.
Und Alpha aus. Siehe dar, es wurde etwas angezeigt.

Bleibt für mich noch die Frage offen, warum du nicht ID3DXSprite verwendest?
Da sind schon sämtliche Methoden - die du mühsam implementiert hast - drin.
there's an app for that

19

Dienstag, 27. Juli 2010, 21:39

Geht ja um den Lerneffekt ;).
Signature ftw, I'm a bad ass :D