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

AwesomeChick

Frischling

  • »AwesomeChick« ist der Autor dieses Themas

Beiträge: 13

Wohnort: Bayern

Beruf: Programmierer

  • Private Nachricht senden

1

09.01.2010, 13:34

Warum hier ein zusätzliches / 3 ?

Hi, ich wollte mal fragen warum im beispielcode, buch seite 163 ( Die Render-Funktion)
steht:
if((int)(g_fTime / 3.0f) % 3 == 0 )

Würde da nicht reichen
if((static_cast<int>g_fTime) % 3 == 0 )

Ich habe mal die alte typumwandlung in die neue ersetzt, aber das
zusätzliche geteilt durch 3 ist doch ein zusätzlicher unnötiger schritt, man will
ja nur alle 3 sekunden eine andere filterfunktion.
Wenn ich falsch liege, bitte erklärt mir, weswegen hier noch /3 gerechnet wird.

zur veranschaulichung hier mal der gesamte code:

if((int)(g_fTime / 3.0f) % 3 == 0)
{
// Bilineare Filter mit linearem MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Linear, MAG: Linear, MIP: Linear)");
}
else if((int)(g_fTime / 3.0f) % 3 == 1)
{
// Keine Filter ("PlayStation-Effekt"), auch kein MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Point, MAG: Point, MIP: None)");
}
else
{
// Maximaler anisotropischer Filter ohne MIP-Mapping
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY,
g_Direct3DParameters.DeviceCaps.MaxAnisotropy);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Anisotropic, MAG: Linear, MIP: None)");
}


ach ja, und diese Zeile habe ich noch nicht ganz verstanden, kann mir die evtl auch jmd
erklären?(es geht um die Weltmatrix)

g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));

danke schonmal im voraus!
IDE: Visual Studio Express 2008[in use]
Visual Studio 2008
SDK: DirectX SDK (August 2009)
o Windoof7 ultimate

2

09.01.2010, 14:08

Wenn dort nur % 3 stehen würde würdest du es jede Sekunde verändern.

z.B.

wenn g_fTime = 3
(3 / 3) % 3=1
aber wenn g_fTime jetzt um 1 erhöht wird
wäre bei (4/3) % 3 immernoch 1 als Ergebniss
bei 4 % 3 wäre das Ergebniss aber 2

C--

Alter Hase

Beiträge: 465

Beruf: Schüler

  • Private Nachricht senden

3

09.01.2010, 14:17

Nur so ein kleiner Hinweis: den Code mit den Code-Tags(Button "Code" oder "C++-Code") formatieren ;)

Zitat

ach ja, und diese Zeile habe ich noch nicht ganz verstanden, kann mir die evtl auch jmd
erklären?(es geht um die Weltmatrix)

g_pD3DDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));


Die setzt die Matrix mWorld als Weltmatrix ein, meintest du das?
Ich spreche: C/C++, C++/CLI C#, VBA, VB.NET, Delphi, (HTML, Javascript(bisschen))
------------------------------------------------------------
Hier steht eventuell schon in ein paar Monaten der Link zu meiner Homepage!

return 0;
;)

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

4

09.01.2010, 14:25

Zitat von »"manu7777"«


aber wenn g_fTime jetzt um 1 erhöht wird
wäre bei (4/3) % 3 immernoch 1 als Ergebniss
bei 4 % 3 wäre das Ergebniss aber 2

4 % 3 ist aber 1.
3 % 3 = 0

if((int)(g_fTime / 3.0f) % 3 == 0 )
trifft nur bei einem wert von 9-11,999 oder ein vielfaches zu

if(static_cast<int>(g_fTime) % 3 == 0 )
nur bei einem wert von 3-3,999 oder ein vielfaches
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

5

09.01.2010, 15:02

ups stimmt

6

09.01.2010, 22:58

Zitat von »"NachoMan"«


if((int)(g_fTime / 3.0f) % 3 == 0 )
trifft nur bei einem wert von 9-11,999 oder ein vielfaches zu

if(static_cast<int>(g_fTime) % 3 == 0 )
nur bei einem wert von 3-3,999 oder ein vielfaches


Hä?

Der Unterschied ist eigentlich folgender:
Bei x%3 == 0 ist bei steigendem x:
100100100100100100...
Bei (x/3)%3 ist die Verteilung dagegen:
111 000 000 111 000 000 111 000 000 ....
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

10.01.2010, 00:15

Zitat von »"Jonathan_Klein"«

Bei (x/3)%3 ist die Verteilung dagegen:
111 000 000 111 000 000 111 000 000 ....

fast
wert:
(0)(1)(2,9)|(3)(4)(5,9)|(6)(7)(8,9)|(9)(10)(11,9)|...
ergebnis:
(0)(0)(0)|(1)(1)(1)|(2)(2)(2)|(0)(0)(0)|...
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

8

10.01.2010, 17:55

Argh, sry, ich hab das ==0 vergessen^^
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige