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

Klaus

Treue Seele

  • »Klaus« ist der Autor dieses Themas

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

1

19.01.2004, 22:17

Noch ein Problem mit tbGUIImage

Hallo,

ich weiß jetzt nicht, ob das zur Spieleprogrammierung oder direkt zum Buch gehört, denn es bezieht sich ja auf die Engine...
Seid mir bitte nich böse, wenn ihr den Thread verschieben müsst.

Also, mein Problem:

Ach ja, ich muss vielleicht erst dazu sagen, dass ich den Bug, den man im "Das Buch"-FAQ-Forum findet, schon behoben habe.

Also, es ist so:

Für ein Helikopterspiel habe ich 5 verschiedene "Modelle" (2D eben ;) ) auf einer Textur. Ich kann dann auch im Spiel mehrere Helikopter mit dieser Textur zeichnen, das klappt alles super.

Nun möchte ich im "Konfigurationsdialog" (mit tbGUI erstellt), der vor dem Laufen des Spiels die Auswahl von Waffen, Tasten, Levels und so weiter gibt. Der Dialog wird von der Spielklasse angezeigt, ebenso wie das laufende Spiel.
Das bedeutet dann auch, dass ich der tbGUI::CreateImage als Textur den selben Pointer übergebe, den ich auch zum Textur-Setzen beim Rendern der Helikopter benutze, und die demnach auch erfolgreich geladen wurde.
Sobald ich aber nun mit tbGUI::CreateImage das Bild erzeuge, werden sowohl anstatt des Bildes, als auch anstatt der Helikopter nur noch weiße Vierecke abgebildet.
Dass diese Vierecke die Vertizes sind, auf denen die Textur liegen sollte, ist dadurch klar ersichtlich, dass ich ja die Vertexfarben verändern kann, und so klar sehe, dass die Textur schlicht fehlt.

Ich hab mir auch den Code in der Engine ein paar mal angeschaut und bin einfach nicht schlauer geworden... könnt ihr mir vielleicht helfen?

Das Laden der Textur (muss wohl erfolgreich sein. Es ist ja vom tbGUIImage erst mal unberührt):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
m_pHeliTex = tbTextureManager::GetTexture("Data\\Helicopters.bmp",
                                        TRUE,
                                        D3DX_DEFAULT,
                                        D3DX_DEFAULT,
                                        D3DX_DEFAULT,
                                        D3DFMT_UNKNOWN,
                                        0,
                                        D3DPOOL_MANAGED,
                                        D3DX_DEFAULT,
                                        D3DX_DEFAULT,
                                        0x00FF00FF);
    if(m_pHeliTex == NULL) TB_ERROR("Fehler beim Laden von Data\\Helicopters.bmp!", TB_ERROR);



Danach kommt das ganze GUI-Skin Zeug usw... das funzt ja.

Dann, nach vielen CreateFrames und CreateButtons...

Quellcode

1
m_pGUI->CreateImage (   GUI_OPTIONS_IMAGE_PLAYER1,      GUI_PAGE_OPTIONS,   tbVector2(114.0f,  85.0f),  tbVector2(256.0f, 128.0f),  m_pHeliTex);


nach ein paar weiteren Frames und Buttons für PAGE 2 folgt dann das TB_OK;.



Die tbGUIImage::ReceiveImage sieht jetzt so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    tbGUIVertex aVertex[4];

   switch(pMsg->Type)
   {
   case TB_GMT_RENDER:
      // Wenn das Element unsichtbar ist, wird es nicht gerendert.
      if(!m_bVisible) break;

      if(pMsg->aiInt[0] == 2)
      {
         // Bild zeichnen
         m_pGUI->AddRect(m_vPosition * m_pGUI->m_vScaling, m_vSize * m_pGUI->m_vScaling,
                        m_Color, m_vTopLeftTex, m_vBottomRightTex - m_vTopLeftTex,
                        aVertex);

         
         tbDirect3D::SetTexture(0, m_pTexture);

         // Vertexformat und Render-States
         tbDirect3D::SetFVF(TB_GUI_FVF);
         tbDirect3D::SetRS(D3DRS_ZENABLE, FALSE);
         tbDirect3D::SetRS(D3DRS_ZWRITEENABLE, FALSE);
         tbDirect3D::SetRS(D3DRS_COLORVERTEX, TRUE);
         tbDirect3D::SetRS(D3DRS_ALPHABLENDENABLE, TRUE);
         tbDirect3D::SetRS(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
         tbDirect3D::SetRS(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
         tbDirect3D::SetTSS(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
         tbDirect3D::SetTSS(0, D3DTSS_COLORARG1, D3DTA_CURRENT);
         tbDirect3D::SetTSS(0, D3DTSS_COLORARG2, D3DTA_TEXTURE);
         tbDirect3D::SetTSS(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
         tbDirect3D::SetTSS(0, D3DTSS_ALPHAARG1, D3DTA_CURRENT);
         tbDirect3D::SetTSS(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);

         // Dreiecke zeichnen
         tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex,
                          sizeof(tbGUIVertex));
      }
      break;
   }

   return TB_OK;


Auch hier hab ich nichts gefunden, was nicht dem im FAQ-Forum entspricht.


Die Heli-Render-Methode braucht ihr nicht, oder? Denn das funktioniert ja wunderbar, sobald ich nur die oben gepostete Zeile m_pGUI->CreateImage (...); auskommentiere.

Danke schonmal für eure Hilfe :)
Mozilla Firefox
The Browser - reloaded

Klaus

Treue Seele

  • »Klaus« ist der Autor dieses Themas

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

2

20.01.2004, 18:26

Re: Noch ein Problem mit tbGUIImage

*push*

kann keiner helfen? ???
Daviiid :crying: bittteee :rolleyes:
Mozilla Firefox
The Browser - reloaded

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

21.01.2004, 10:33

Kommentiere mal die folgenden Zeilen in ReceiveMessage aus, bzw. entferne sie:

Quellcode

1
2
3
4
     // Bild zeichnen 
         m_pGUI->AddRect(m_vPosition * m_pGUI->m_vScaling, m_vSize * m_pGUI->m_vScaling, 
                        m_Color, m_vTopLeftTex, m_vBottomRightTex - m_vTopLeftTex, 
                        aVertex); 

Klaus

Treue Seele

  • »Klaus« ist der Autor dieses Themas

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

4

21.01.2004, 15:06

Das Ergebnis ist jetzt, dass das GUI-Image gar nicht mehr sichtbar ist, und die beiden Helikopter-"Modelle" immernoch nur weiß sind.
Ich nehme an, dass das Bild jetzt in der linken oberen Ecke klebt, der Ausdehnung von (0|0), da ja die Vektoren in aVertex alle standardmäßig 0.0f sind, oder nicht?
Und das AddRect wird ja nur in der ReceiveImage bei GMT_RENDER ausgeführt, und nicht etwa bereits beim CreateElement oder so.

Was hast du dir denn von der Änderung erhofft?

Aber schon mal danke, David, dass du auf meine Message reagiert hast :)

Ich hoffe, du findest noch den Fehler, oder kannst mir helfen, ihn zu finden :)

Was könnte ich denn noch ausprobieren?

Klaus


Edit/PS:
Mir is auch noch nich gant klar, warum du das Image mit DrawPrimitiveUP aus dem Systemspeicher schreibst, obwohl du das ja vorher mit AddRect dem GUI-Vertexbuffer einverleibst ???
Mozilla Firefox
The Browser - reloaded

Klaus

Treue Seele

  • »Klaus« ist der Autor dieses Themas

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

5

25.01.2004, 18:29

Hats eigentlich schon mal jemand hinbekommen, mit tbImage ein Bild zu rendern??
Mozilla Firefox
The Browser - reloaded

Klaus

Treue Seele

  • »Klaus« ist der Autor dieses Themas

Beiträge: 245

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

6

27.01.2004, 16:53

David?

Ich nerv doch nich, oder? :crying:
Mozilla Firefox
The Browser - reloaded

Werbeanzeige