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

Leimy

Frischling

  • »Leimy« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Torgelow

  • Private Nachricht senden

1

06.01.2004, 11:31

tbVector3 mit Funktion zurückgeben!

Hi!

Folgender Quellcode zeichnet mir KEIN Viereck:

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
42
43
44
45
46
47
48
49
tbResult    BW_Spiel::RenderRahmen()
{   
Vertex2D    PRahmen[4],P;
int iTemp=0;
tbVector3   Temp=Rel(0.0f,1.0f);

TB_INFO("Neuer Frame!");
tbWriteVector3ToLog(Temp);
tbWriteVector3ToLog(tbVector3(0.0f,599.0f,0.5f));

PRahmen[0].vPosition=Rel(0.0f,0.0f);
PRahmen[1].vPosition=Rel(0.0f,1.0f);
PRahmen[2].vPosition=Rel(1.0f,0.0f);
PRahmen[3].vPosition=Rel(1.0f,1.0f);

tbWriteVector3ToLog(PRahmen[1].vPosition);

/*
PRahmen[0].vPosition=tbVector3(0.0f,0.0f,0.5f);
PRahmen[1].vPosition=tbVector3(799.0f,0.0f,0.5f);
PRahmen[2].vPosition=tbVector3(0.0f,599.0f,0.5f);
PRahmen[3].vPosition=tbVector3(799.0f,599.0f,0.5f);
*/

for(iTemp=0;iTemp<4;iTemp++)
{
   PRahmen[iTemp].Diffuse=(D3DCOLOR)(tbColor(0.5f));
   PRahmen[iTemp].fRHW=1.0f;
}

if(FAILED(tbDirect3D::GetDevice()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,PRahmen,sizeof(Vertex2D))))
        TB_INFO("Klappte nicht!");

    return TB_OK;
}

tbVector3   BW_Spiel::Rel(float X,float Y)
{
tbVector3   Erg;

if(X>1.0f)  X=1.0f;
if(X<0.0f)  X=0.0f;
if(Y>1.0f)  Y=1.0f;
if(Y<0.0f)  Y=0.0f;

Erg=tbVector3(X*ScreenWidth,Y*ScreenHeight,0.5f);

return Erg;
}


ScreenWidth und -Height sind denke ich mal selbst erklärend!

Im Logbuch steht dann folgendes:

...
INFO: Neues Frame! (BW_Spiel.cpp, Zeile 55, Funktion (Unbekannt))
3D-Vektor: x = 0.000, y = 599.000, z = 0.500, Länge = 599.000
3D-Vektor: x = 0.000, y = 599.000, z = 0.500, Länge = 599.000
3D-Vektor: x = 0.000, y = 599.000, z = 0.500, Länge = 599.000
...

Trotzdem ist kein graues Viereck auf dem Bildschirm zu sehen. "Klappte nicht" steht auch nicht im Log.

Wenn ich aber das, was kommentiert ist, nehme, IST ein graues Viereck zu sehen.

Die Frage aller Fragen nun: WARUM?

2

06.01.2004, 14:09

was macht Rel(float, float) mit der z-koordinate deines 2dvertex?

Leimy

Frischling

  • »Leimy« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Torgelow

  • Private Nachricht senden

3

06.01.2004, 14:42

Die Funktion Rel(float,float) setzt die z-Koordinate auf 0.5f

Der Quellcode dieser Funktion steht übrigens in meinem Posting!

4

06.01.2004, 15:05

oh..stimmt *g*
hm dann weis' ich auch nicht. und mit dem auskommentierten code gehts?

Leimy

Frischling

  • »Leimy« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Torgelow

  • Private Nachricht senden

5

06.01.2004, 17:20

Ja, obwohl das beides doch wohl das selbe ist, oder irre ich mich da?

6

06.01.2004, 17:29

an sich schon nur:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
PRahmen[0].vPosition=Rel(0.0f,0.0f);
PRahmen[1].vPosition=Rel(0.0f,1.0f);
PRahmen[2].vPosition=Rel(1.0f,0.0f);
PRahmen[3].vPosition=Rel(1.0f,1.0f);

tbWriteVector3ToLog(PRahmen[1].vPosition);

/*
PRahmen[0].vPosition=tbVector3(0.0f,0.0f,0.5f);
PRahmen[1].vPosition=tbVector3(799.0f,0.0f,0.5f); //<-
PRahmen[2].vPosition=tbVector3(0.0f,599.0f,0.5f); //<- oben ist 1 und 2 vertauscht
PRahmen[3].vPosition=tbVector3(799.0f,599.0f,0.5f); 
*/


vielleicht hast du culling aktiviert und weil du unten die vertizes in einer anderen
reihenfolge definiert hast.

versuchs doch mal so

Quellcode

1
2
3
4
PRahmen[0].vPosition=Rel(0.0f,0.0f);
PRahmen[2].vPosition=Rel(0.0f,1.0f);
PRahmen[1].vPosition=Rel(1.0f,0.0f);
PRahmen[3].vPosition=Rel(1.0f,1.0f);

Leimy

Frischling

  • »Leimy« ist der Autor dieses Themas

Beiträge: 5

Wohnort: Torgelow

  • Private Nachricht senden

7

06.01.2004, 17:37

Hey, das klappt! *DANKE* :top:
Wie deaktiviert man Culling denn?

tbDirect3D::SetRS(D3DRS_CULLING,FALSE); ????

8

06.01.2004, 17:38

IDirect3DDevice9*->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
ich kenn die tribase-engine nicht- aber sieht gut aus.

Werbeanzeige