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

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

1

17.02.2013, 17:43

Spotlicht (Winkel Phi und Theta vertauscht??)

Hi Leute

ich habe mal ne Frage.
Und zwar möchte ich mir gerade ein Spotlicht erstellen, welches mit hilfe einer Sinusfunktion auf und ab schwenkt.

Beim erstellen des Lichts muss ich ja auch die Winkel (also Phi und Theta) angeben.

Definition laut Web und Buch von David:
Phi= Äußererlichtkegel
Theta= Innererlichtkegel

so nun habe ich folgendes für die zwei Winkel angegeben:

C-/C++-Quelltext

1
2
3
4
D3DLIGHT9 Light;

Light. Theta    = 0.25f;
Light. Phi      = 0.5f;


Nun sollte ja theoretisch der äußere Lichtkegel (Phi) größer sein als der innere.
Dem ist beim start meines Programms jedoch nicht.
Der Innerelichtkegel ist riesig (ca 250°) und der Äußere hat gesehene 360°.

Also alles ist Beleuchtet.

Wenn ich nun jedoch dies hier angebe:

C-/C++-Quelltext

1
2
3
D3DLIGHT9 Light;
Light. Theta        = 0.2f;
Light. Phi          = 0.1f;


dann bekomme ich vernünftige Kegel.

Warum ist das so?
Mache ich fehler bei der Winkelangabe?

Danke euch jetzt schonmal für Antworten.

Mit freundlichem Gruß
xXSlayerXx
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

17.02.2013, 21:56

So steht's auch in der Direct3D-Dokumentation:
http://msdn.microsoft.com/en-us/library/…6(v=vs.85).aspx

Finde ich jetzt sehr seltsam.
Zeig mal die übrigen Parameter des Lichts.

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

3

17.02.2013, 22:12

Bin heute nicht mehr am Pc.
Erst morgen nach der Arbeit um 5 Uhr.

Habe jedoch die gleichen Parameter verwendet wie im Buch Kapitel 2.9.3.
Dann habe ich noch die Richtung hinzugefügt. Diese hat den Vector (1.0f, 0.0f, 0.0f).

Mehr Infos kann ich morgen dazu schreiben.

Mit freundlichem Gruß
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »xXSlayerXx« (17.02.2013, 22:33)


xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

4

18.02.2013, 18:19

So da bin ich ;)

also meine Licht Einstellungen sehen wie folgt aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    D3DLIGHT9 Light;
    Light.Type          = D3DLIGHT_SPOT;        
    Light.Diffuse       = tbColor(1.0f, 1.0f, 1.0f);    
    Light.Ambient       = tbColor(1.0f, 1.0f, 1.0f);    
    Light.Specular      = tbColor(1.0f, 1.0f, 1.0f);    
    Light.Position      = tbVector3(1.0f, sin(g_fTime)*50, 1.0f);   
    Light.Direction     = tbVector3(1.0f, 0.0f, 0.0f);  
    Light.Range         = 100.0f;                       
    Light.Attenuation0  = 0.0f;                         
    Light.Attenuation1  = 0.025f;                       
    Light.Attenuation2  = 0.0f;                         
    Light. Theta        = 0.2f;
    Light. Phi          = 0.1f;

    g_pD3DDevice->SetLight(0, &Light);
    g_pD3DDevice->LightEnable(0, TRUE);


kann mir noch immer nicht erklären warum das ganze so ist
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

18.02.2013, 20:03

Sollte Theta nicht eigentlich kleiner sein als Phi!?

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

6

18.02.2013, 20:05

genau darum geht es ja

wie im ersten beitrag beschrieben, bekomme ich einen riesigen theta winkel raus wenn ich diesen kleiner als phi mache.
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Werbeanzeige