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

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

18.02.2009, 20:42

[Erledigt] HGE: Mit Transparenz auf Rendertargets rendern

Hi

also ich versuche ( :) ) zur Zeit ein kleines Spiel mit HGE zu
machen. Nun muss ich verschiedene Teile eines geladenen Bildes
auf ein Rendertarget rendern. Mein Problem ist jetzt, dass
das Rendertarget keine transparenz mit übernimmt, sondern das einfach
mit irgendwelchen Farben auffüllt.


(Link)


Ich denke man sieht was ich meine ;)

Die Frage ist jetzt halt wie ich diese Stellen transparent mache ???

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

18.02.2009, 20:44

Entweder du sagst es ist kein Bug, sondern ein Feature und lässt es so, oder du gibst etwas Code her...

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

3

18.02.2009, 21:06

Hmmm jaaa Code muss ich erstmal zusammenschnipseln :)

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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Schiff image neu zeichnen

void Ship::RepaintShipImage()
{
    // Beginnen auf das Schiffsimage zu zeichnen

    Hge->Gfx_BeginScene(m_ShipImageTarget);

    //Hge->Gfx_Clear(0xFF00);


    // Alle Schiffskomponenten durchgehen und Rendern

    for(list<pair<int, ShipComponent*>>::iterator it = m_Components.begin(); it != m_Components.end(); ++it)
        (*it).second->Render(((*it).first));

    // Scene beenden

    Hge->Gfx_EndScene();
}




// Alles auf den Bildschirm rendern

void MainGameState::Render()
{
    // Erst Alles auf ein Hintergrund malen

    m_Background->BeginRender();

    // Alle Schiffe durchgehen

    for(list<Ship*>::iterator it = m_Ships.begin(); it != m_Ships.end(); ++it)
        (*it)->Render(m_PlayerShip->GetPosition());

    m_Background->EndRender();



    // Jetzt Alles auf den Bildschirm bringen

    Hge->Gfx_BeginScene();
        m_Background->RenderBackground();
    Hge->Gfx_EndScene();
}

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

4

18.02.2009, 21:13

Das habe ich gerade noch zu Target_Create gefunden:

Zitat von »"HGE DOCs"«

Render targets support alpha channel in 32-bit video modes only, in 16-bit video modes render targets are always opaque. You could read HGE_SCREENBPP system state to discover in what video mode HGE is currently running.


Und ja es sind 32 bpp

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

18.02.2009, 21:39

eigentlich indem du es einmal mit 0x00000000 clearst. ansonsten rendere eine png mit komplett alpha 0 vorher drüber.

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

6

18.02.2009, 22:07

Hmmm habs mit:

C-/C++-Quelltext

1
Hge->Gfx_Clear(0x00000000);


und

C-/C++-Quelltext

1
Hge->Gfx_Clear(0xFF000000);


versucht...

Aber jetzt wird der Hintergrund einfach schwarz :cry:

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

7

22.02.2009, 00:21

Das mir dem Rendern des Images hat auch nicht funktioniert...
Muss ich eventuel noch ne extra einstellung beim erstellen machen ?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

22.02.2009, 08:50

Vermutlich kann dir niemand helfen, weil du nur irrelevanten Code gepostet hast...

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

9

22.02.2009, 10:28

Den einzigen Code-ausschnitt der noch relevant wäre ist
das Erstellen das Render-Targets

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
m_ShipImageTarget   = Hge->Target_Create( m_Class->GetShipImage()->GetWidth(), m_Class->GetShipImage()->GetHeight(), false );

m_ShipSprite         = new hgeSprite(   Hge->Target_GetTexture(m_ShipImageTarget),
                                        0,
                                        0,
                                        m_Class->GetShipImage()->GetWidth(),
                                        m_Class->GetShipImage()->GetHeight() );

shipClass->InitComponentList(m_Components);
RepaintShipImage();


Und dann gibts da natürlich noch die Render-Funktion der Schiffe:

C-/C++-Quelltext

1
2
3
4
void Ship::Render(hgeVector playerPos)
{
    m_ShipSprite->RenderEx(m_Position.x - playerPos.x + 400, m_Position.y - playerPos.y + 300, m_Orientation);
}


Das Problem ist ja, das alles gerendert wird... bis auf das der Alpha-Wert nicht beachtet wird...

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

22.02.2009, 11:07

hast du darauf geachtet, dass es 2^n werte für das rendertarget sind? darauf weisst der entiwckler eindeutig hin, dass das obligatorisch ist. was anderes fällt mir auch nicht ein.

Werbeanzeige