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

idontknow

unregistriert

1

26.07.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

2

26.07.2010, 21:54

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

idontknow

unregistriert

3

26.07.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.

4

26.07.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

idontknow

unregistriert

5

26.07.2010, 22:21

bringt nix.

6

26.07.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();
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Wollnashorn« (26.07.2010, 23:33)


7

26.07.2010, 23:35

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

idontknow

unregistriert

8

27.07.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...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »idontknow« (27.07.2010, 11:57)


idontknow

unregistriert

9

27.07.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

10

27.07.2010, 12:54

Verwendest du Texturoperationen (Blending, SetTextureStageState...), und wenn ja, wie sehen die aus?
fka tm

Werbeanzeige