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

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

20.09.2004, 00:54

2D Grafik wird nicht angezeigt

Hi,

ich hab heut mein Spiel soweit das das erste Bild angezeigt wird!! Freude!

Im folgenden Code wird das Hintergrundbild vom Ladebildschirm gezeichnet, das funktioniert auch noch. Der Ladebalken wird aber leider nicht angezeigt. Die Koords werden aus einer INI Datei gelesen, das funktioniert auch (mit debugger überprüft). Nur wird der Balken nicht angezeigt und ich weiß nicht warum.

Ich weiß auch nicht warum bei Color nicht überall 1 steht sondern manchmal 0.8. der Code für die Funktion stammt aus Breakanoid vom MainMenue.

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// __________________________________________________________________

// Zeichnet den Balken am LadeSchirm je nach Fortschritt und Hintergrund

tbResult CGalaxyQuest::RenderLoadDisplay(float &fProzent)
{
    /*
    ######################################################################
    #
    #   Zeichnet den Balken am LadeSchirm je nach Fortschritt (der wird
    #   an den schon geladenen Daten gemessen). Und den Hintergrund
    #
    ######################################################################
    #
    #   Fertig
    #
    ######################################################################
    */

    TB_INFO("CGQ::RenderLoadDisplay wird ausgeführt");

    // Puffer leeren und Szene beginnen

    tbDirect3D::Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                      tbColor(0.0f, 0.0f, 0.0f), 1.0f, 0);
    tbDirect3D::BeginScene();

    // ------------------------------------------------------------------

    // Hintergrund erstmal zeichnen


    // Vertexformat und Hintergrundbildtextur setzen, Z-Buffer aus

    tbDirect3D::SetFVF(LOAD_SCREEN_FVF);
    tbDirect3D::SetTexture(0, pLoadScreen);
    tbDirect3D::SetRS(D3DRS_ZENABLE, D3DZB_FALSE);

    // Die vier Vertizes des Bilds erstellen (Rechteck)

    // Links unten

    aVertex[0].vPosition = tbVector3(0.0f, tbDirect3D::GetScreenSize().y, 0.5f);
    aVertex[0].fRHW = 1.0f;
    aVertex[0].Color = tbColor(1.0f, 0.8f, 0.8f);
    aVertex[0].vTex0 = tbVector2(0.0f, 1.0f);

    // Links oben

    aVertex[1].vPosition = tbVector3(0.0f, 0.0f, 0.5f);
    aVertex[1].fRHW = 1.0f;
    aVertex[1].Color = tbColor(0.8f, 1.0f, 0.8f);
    aVertex[1].vTex0 = tbVector2(0.0f, 0.0f);

    // Rechts unten

    aVertex[2].vPosition = tbVector3(tbDirect3D::GetScreenSize().x, tbDirect3D::GetScreenSize().y, 0.5f);
    aVertex[2].fRHW = 1.0f;
    aVertex[2].Color = tbColor(0.8f, 0.8f, 1.0f);
    aVertex[2].vTex0 = tbVector2(1.0f, 1.0f);

    // Rechts oben

    aVertex[3].vPosition = tbVector3(tbDirect3D::GetScreenSize().x, 0.0f, 0.5f);
    aVertex[3].fRHW = 1.0f;
    aVertex[3].Color = tbColor(1.0f, 1.0f, 0.8f);
    aVertex[3].vTex0 = tbVector2(1.0f, 0.0f);

    // Als Dreiecksfolge zeichnen

    tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(LoadscreenFVF));

    // ------------------------------------------------------------------

    // Balken je nach Prozent zeichnen

    
    // Balken Textur aktivieren

    tbDirect3D::SetTexture(0, pBalken);

    // Die vier Vertizes des Balkens erstellen (Rechteck)

    // Links unten

    aVertex[0].vPosition = tbVector3(fBalkenXMin, fBalkenYMax, 0.5f);

    // Links oben

    aVertex[1].vPosition = tbVector3(fBalkenXMin, fBalkenYMin, 0.5f);

    // Rechts unten

    aVertex[2].vPosition = tbVector3(fBalkenXMax, (fProzent * fBalkenYMax), 0.5f);

    // Rechts oben

    aVertex[3].vPosition = tbVector3(fBalkenXMin, (fProzent * fBalkenYMax), 0.5f);

    // Als Dreiecksfolge zeichnen

    tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(LoadscreenFVF));

    // ------------------------------------------------------------------

    // Szene beenden

    tbDirect3D::EndScene();

    tbDirect3D::Present();

    return TB_OK;
}
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

2

20.09.2004, 07:08

Rechts Unten und Rechts Oben sollten doch in der Positionsangabe den selben x- Abstand - fBalkenXMax - haben, oder?


cya,
Stefan

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

3

20.09.2004, 13:27

Die Korrds stimmen bei Rechts oben nicht, hast du das gemeint?
aVertex[3].vPosition = tbVector3(fBalkenXMax, fBalkenYMin, 0.5f);

Damit funktionierts immer noch nicht.

Jetzt hab ich schon probiert den ganzen Balken anzeigen zu lassen, also die Multiplikation mit der fProzent Variable weglassen. funktioniert auch nicht.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Stefan

Alter Hase

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

4

20.09.2004, 18:10

Zitat von »"bassdscho"«

Die Korrds stimmen bei Rechts oben nicht, hast du das gemeint?
aVertex[3].vPosition = tbVector3(fBalkenXMax, fBalkenYMin, 0.5f);


Ja, das hätte ich gemeint, war das falsch? Ich weiß ja nicht was die Veriablen für Werte haben, aber sieht mal sehr komisch aus! Schau mal, bei y hat der Vertex 3 und 4 auch den selben y-Wert bei der Positionsangabe, dass kann doch auch nicht stimmen?


cya,
Stefan

unsigned int

Alter Hase

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

5

20.09.2004, 18:11

nur mal um die frage nach der farbe zu klären:
das ist nur für grafische Effekte... :) würde ich mal annehmen, einfaches weiß wäre fade...
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

6

22.09.2004, 13:28

@unsinged int
Das Rechteck würd doch aber mit der Textur überzogen da ist doch dann die Farbe des rechtecks egal oder nicht?

@Stefan
Ja du hast recht die koordianten müssen so aussehen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
    // Die vier Vertizes des Balkens erstellen (Rechteck)

    // Links unten

    aVertex[0].vPosition = tbVector3(fBalkenXMin, fBalkenYMax, 0.5f);

    // Links oben

    aVertex[1].vPosition = tbVector3(fBalkenXMin, fBalkenYMin, 0.5f);

    // Rechts unten

    aVertex[2].vPosition = tbVector3(fBalkenXMax, fBalkenYMax, 0.5f);

    // Rechts oben

    aVertex[3].vPosition = tbVector3(fBalkenXMax, fBalkenYMin, 0.5f);


Ich hab die Multiplikation jetz mal weggelassen, aber des geht trotzdem nicht. obwohl es ja das gleiche ist wie oben nur mit anderen positionsangaben. ich kapier das nicht!!
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

22.09.2004, 14:15

Wie lautet die Def von LOAD_SCREEN_FVF?

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

8

22.09.2004, 15:29

Die kann eigentlich nicht schuld sein da der hintergrund also das erste bild gezeichnet wird nur der balken nicht. aber hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// VertexFormat für Ladeschirm

#define LOAD_SCREEN_FVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

struct LoadscreenFVF
{
    tbVector3   vPosition;
    float       fRHW;
    D3DCOLOR    Color;
    tbVector2   vTex0;
};
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

22.09.2004, 15:54

Also du nutzt transformierte Vertices. Dann würde ich persönlich mal testen, was passiert denn ich das z aller Vertices auf 0 setze....

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

10

22.09.2004, 16:16

Geht immer noch nicht
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Werbeanzeige