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

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

1

26.06.2003, 15:15

tbDraw2D und Texturen

Hallo!
Noch ne Frage...
Wenn ich mit tbDraw2D auf eine Textur zeichne, bleibt das ja permanent auf der Textur. Ich möchte aber nach jedem Rendern der Textur die Textur wieder so heben, wie sie in der Datei ist.

Wie müsste ich das am besten machen?

Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

26.06.2003, 15:56

Hi!

Man kann eine tbDraw2D-Klasse auch so erzeugen, dass sie in den normalen Systemspeicher zeichnet. So kannst Du Dir dann eine Kopie von der Originaltextur anlegen.

Erst eine tbDraw2D-Instanz für die Textur erzeugen:

Quellcode

1
2
tbDraw2D* pD2DTexture = new tbDraw2D;
pD2DTexture->Init(pTexture, 0);


Jetzt erzeugst Du eine weitere Instanz der Klasse. Diesmal wird jedoch der Systemspeicher benutzt. Höhe, Breite und Format sind wie bei der Originaltextur:

Quellcode

1
2
tbDraw2D* pD2DCopy = new tbDraw2D;
pD2DCopy->Init(pD2DTexture->GetWidth(), pD2DTexture->GetHeight(), pD2DTexture->GetFormat());


Jetzt kannst Du die Textur auf das neue tbDraw2D-Objekt kopieren:

Quellcode

1
2
3
4
5
pD2DTexture->BeginDraw();
pD2DCopy->BeginDraw();
pD2DTexture->Blt(pD2DCopy, 0, 0, 0, 0, pD2DCopy->GetWidth(), pD2DCopy->GetHeight());
pD2DTexture->EndDraw();
pD2DCopy->EndDraw();


Am Anfang jedes Frames kannst Du dann die Kopie wieder zurück in die Originaltextur kopieren (beim Blt-Befehl werden jetzt die tbDraw2D-Objekte vertauscht):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
pD2DTexture->BeginDraw();

// Originaltextur wiederherstellen
pD2DCopy->BeginDraw();
pD2DCopy->Blt(pD2DTexture, 0, 0, 0, 0, pD2DCopy->GetWidth(), pD2DCopy->GetHeight());
pD2DCopy->EndDraw();

// Jetzt die Textur "bemalen"
// ...

pD2DTexture->EndDraw();

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

3

26.06.2003, 22:23

Hm, nochmal bitte... :)

Hm, das versteh ich noch nicht so richtig.

Wenn ich jetzt eine Textur lade und sie der tbDraw2D-Instanz D2DOrig zuweise und diese dann in die Instand D2DDraw kopiere, dann sind beide gleich.
so, wenn ich dann in D2DDraw male und das dann wieder in D2DOrig kopiere, dann ist doch die Originaltextur wieder überschrieben oder nicht?

Kann man nicht eine Textur zweimal mit dem Manager laden, also, dass sie zweimal im Speicher liegt? Und die eine wird dann bemalt und vor jedem Frame durch die andere erstetzt oder so.

Geht das nicht irgendiwe?

Gruß, Maxi

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

26.06.2003, 22:35

Erst wird die Kopie der Originaltextur in die dynamische Textur, die Du bemalen willst, kopiert. So ist die Textur anfangs immer wieder in ihrem ursprünglichen Zustand.
Es geht auch anders, schau mal in der Dokumentation unter IDirect3DDevice9::UpdateSurface.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

5

26.06.2003, 22:43

OK, danke, jetzt hab ich es verstanden, muss es nur noch umsetzen :)
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

6

26.06.2003, 23:08

So, also jetzt habe ich immer die Original-Textur auf dem Schirm, so wei es sein soll.

Die Textur ist ein Bitmal und ich lade sie mit dem Colorkey 0, 0, 0, 255, also schwarz ist transparent.
Das geht auch alles sehr gut. Wenn ich jetzt auber auf die Textur zeichnen will, dann ist das was ich zeichne hinter dem, was auf der Originaltextur drauf ist. Aber ich möchte über die Textur zeichnen und nicht untendrunter...
Außerdem kann ich nur schwarz zeichnen, egal weche Farbe ich angebe...

Hier mal der Code:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
tbDirect3D::SetRS(D3DRS_ALPHATESTENABLE, TRUE);
tbDirect3D::SetRS(D3DRS_ZENABLE, D3DZB_FALSE);
tbDirect3D::SetFVF(VERTEX_SCHLAGANI_FVF);
// Erst die Originaltextur in den in die zu bemalende Textur kopieren, 
// um die Originaltextur beizubehalten:
m_SchlagAniOrig->BeginDraw();
m_SchlagAni->BeginDraw();
m_SchlagAniOrig->Blt(m_SchlagAni, 0, 0, 0, 0, m_SchlagAni->GetWidth(), m_SchlagAni->GetHeight());
m_SchlagAniOrig->EndDraw();
m_SchlagAni->EndDraw();     

// Die Schlaganimation auf die Textur zeichnen
m_SchlagAni->BeginDraw();
m_SchlagAni->DrawFilledRect(10, 20, int(m_ShootStr * 50.0f) + 10, 40, m_SchlagAni->MakeRGB(255, 255,255));
m_SchlagAni->EndDraw();
        
// Die Textur in die linke obere Ecke zeichnen
tbDirect3D::SetTexture(0, m_TexSchlag);
tbDirect3D::GetDevice()->SetStreamSource(0, m_SchlagAniVerts->GetVB(), 0, sizeof(SVertexSchlagAni));
tbDirect3D::GetDevice()->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
tbDirect3D::SetRS(D3DRS_ALPHATESTENABLE, FALSE);
tbDirect3D::SetRS(D3DRS_ZENABLE, D3DZB_TRUE);


Das ist in der Renderfunktion. Wie muss ich es mache, dass es über die Textur geht und mit Farben?
Gruß, Maxi
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

26.06.2003, 23:11

Lass mal das "EndDraw" und das gleich darauf folgende "BeginDraw" für m_SchlagAni weg. Das mit der Farbe ist komisch, bei mir geht es! Probier mal MakeRGB(255, 0, 0). Das müsste Rot ergeben.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

8

26.06.2003, 23:15

Also, das hat nicht geholfen, auch die Farbe ist noch schwarz.
Aber mir ist etwas naderes aufgefallen:

Wenn ich genau hinsehe, dann kann man durch das grün der Textur ein ganz bisschen hindurchsehen. Dahinter sehe ich dann das Rechteck das ich zeichne, auch wenn es schawrz ist.

Und nohc was:
Wenn ich die Kamera drehe, so dass hinter der Textur immer ein anderer Hintergrund ist, dann wechselt die Textur pltzlich von dunkel auf hellgrün um.

Was ist das bloß?

Gruß, Maxi
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

26.06.2003, 23:20

Du hast wohl Alpha-Blending eingeschaltet!
Wahrscheinlich ist mit tbDraw2D alles in Ordnung.

Maxi

Treue Seele

  • »Maxi« ist der Autor dieses Themas

Beiträge: 136

Wohnort: Müncheberg

Beruf: Ich muss noch in die Schule

  • Private Nachricht senden

10

26.06.2003, 23:25

Nein, ich habe kein Alphabending eingeschaltet. Aber Alphatesting. Aber auch ohne das sieht es noch genauso aus, nur dass man jetzt auch die schwarze Umrandung der Textur sieht.
Gruß, Maxi

Hier, die Homepage von meiner Band:
www.maxis-house.de

Könnt euch unsere ersten Songs saugen...

Werbeanzeige