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

1

26.12.2009, 09:11

Probleme bei Blendeffekt

Hallo.
Ich bin momentan dabei einen Bledneffekt zu programmieren
aber es will mir nicht gelingen ein Rechteck aus schwarz zu erstellen.
Hier mein Code:

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
39
40
41
42
43
44
45
46
47
48
49
50
class CVertexColor
{
    public:
    tbVector3            vPos;
    D3DCOLOR             Color;
    float                fRHW;
    static const DWORD dwFVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;

    tbResult CreateColorMap(tbColor Color, float fBrightness);
};

tbResult CVertexColor::CreateColorMap(tbColor Color, float fBrightness)
{
    CVertexColor aVertex[4];

    tbDirect3D& D3D = tbDirect3D::Instance();
    aVertex[0].vPos = tbVector3(0.0f, D3D.GetScreenSize().y, 0.5f);
    aVertex[0].fRHW = 1.0f;
    aVertex[0].Color = tbColor(Color.fRed, Color.fGreen, Color.fBlue, fBrightness);


    aVertex[1].vPos = tbVector3(0.0f, 0.0f, 0.0f);
    aVertex[1].fRHW = 1.0f;
    aVertex[1].Color = tbColor(Color.fRed, Color.fGreen, Color.fBlue, fBrightness);


    aVertex[2].vPos = tbVector3(D3D.GetScreenSize().x, D3D.GetScreenSize().y, 0.5f);
    aVertex[2].fRHW = 1.0f;
    aVertex[2].Color = tbColor(Color.fRed, Color.fGreen, Color.fBlue, fBrightness);

    aVertex[3].vPos = tbVector3(D3D.GetScreenSize().x, 0.0f, 0.5f);
    aVertex[3].fRHW = 1.0f;
    aVertex[3].Color = tbColor(Color.fRed, Color.fGreen, Color.fBlue, fBrightness);

    D3D.SetTexture(0, NULL);
    D3D.SetRS(D3DRS_ALPHABLENDENABLE, TRUE);
    D3D.SetRS(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
    D3D.SetRS(D3DRS_DESTBLEND, D3DBLEND_ONE);
    D3D.SetRS(D3DRS_ZENABLE, FALSE);
    D3D.SetRS(D3DRS_ZWRITEENABLE, FALSE);
    D3D.SetFVF(CVertexColor::dwFVF);

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(CVertexColor));

    D3D.SetRS(D3DRS_ZENABLE, TRUE);
    D3D.SetRS(D3DRS_ZWRITEENABLE, TRUE);
    D3D.SetRS(D3DRS_ALPHABLENDENABLE, FALSE);

    return TB_OK;
}


Und die Funktion wird dann so aufgerufen:

C-/C++-Quelltext

1
2
3
g_pVertexColor->CreateColorMap(tbColor(0.0f, 0.0f, 0.0f), 0.0f);
//oder

g_pVertexColor->CreateColorMap(tbColor(0.0f, 0.0f, 0.0f), 1.0f);

2

26.12.2009, 11:04

Soweit ich weiss, darf ein Vertex keine Memberfunktionen haben, und das RHW muss nach Position kommen

3

26.12.2009, 11:48

Okay.
Habe es jetzt einfach mit einer Struktur gelöst
aber der zeichnet nur das schwarze Rechteck, wenn der Background
nicht gezeichnet wird.

Also in der Move-Funktion setzte ich eine Variable auf True.
Und in der Render-Funktion prüfe ich dann ob diese auch true ist und
wenn sie true ist, zeichne ich das Rechteck.

Aber wenn ich vorher noch den Background zeichne klappt es nicht.
Wenn nur die Schrift da ist, ist das irgendwie kein Problem.

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
39
40
41
42
43
44
45
tbResult CIntro::Render(float fTime)
{   
    tbDirect3D& D3D = tbDirect3D::Instance();
    D3D->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor( 0.0f, 0.0f, 0.0f), 1.0f, 0);
    D3D->BeginScene();

    //g_pVertex->CreateBackground(m_Background);

    
    g_pHeroes->m_pFont->Begin();
    g_pHeroes->m_pFont->DrawText( tbVector2( 0.5f, 0.5f), "Drücken Sie Enter!", TB_FF_ALIGN_HCENTER | TB_FF_ALIGN_VCENTER | TB_FF_RELATIVE | TB_FF_RELATIVESCALING);
    g_pHeroes->m_pFont->End();

    if(m_bÜbergang == true)
    {
    CVertexColor aVertex[4];

    aVertex[0].vPos = tbVector3(0.0f, D3D.GetScreenSize().y, 0.5f);
    aVertex[0].fRHW = 1.0f;
    aVertex[0].Color = tbColor(0.0f, 0.0f, 0.0f);


    aVertex[1].vPos = tbVector3(0.0f, 0.0f, 0.0f);
    aVertex[1].fRHW = 1.0f;
    aVertex[1].Color = tbColor(0.0f, 0.0f, 0.0f);


    aVertex[2].vPos = tbVector3(D3D.GetScreenSize().x, D3D.GetScreenSize().y, 0.5f);
    aVertex[2].fRHW = 1.0f;
    aVertex[2].Color = tbColor(0.0f, 0.0f, 0.0f);

    aVertex[3].vPos = tbVector3(D3D.GetScreenSize().x, 0.0f, 0.5f);
    aVertex[3].fRHW = 1.0f;
    aVertex[3].Color = tbColor(0.0f, 0.0f, 0.0f);

    D3D.SetTexture(0, NULL);
    D3D.SetFVF(CVertexColor::dwFVF);

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(CVertexColor));

    }

    D3D->EndScene();

    return TB_OK;
}

4

26.12.2009, 11:51

Versuch mal beim Übergang den Z-Test und die Beleuchtung auszuschalten, und die ganze sache vor dem Font zu machen. CUlling ausmachen kann auch nichts schaden.

5

26.12.2009, 12:05

Ja, danke, so klappt es =).
Lag am Z-Buffer.

mfg

6

26.12.2009, 12:49

Gern geschehen.

EDIT: 500. Beitrag :D :D

7

27.12.2009, 11:35

Herzlichen Glückwunsch ;)

Edit: Meine 100 hab ich iwie verpasst :D

Werbeanzeige