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

Anonymous

unregistriert

1

30.11.2004, 11:06

Spotlicht setzen

Hallo,

ich versuche gerade die Übungsaufgaben des Kaptitels über die Beleuchtung zu lösen und habe dabei so meine Probleme, die, wie ich vermute mit der Positionierung eines Spotlichts zusammenhängen.

Und zwar scheint alles genau umgekehrt zu sein: Dort wo ich den Lichtkegel vermute, ist ein großer schwarzer Fleck und am Rand sind die Quadrate dann wieder zu sehen. Ich vermute das hängt mit der Positionierung zusammen, die ich wie folgt durchführe:

-----------------------
tbVector3 vLookAt(g_vCameraPosition + tbVector3(sinf(g_fCameraAngle), 0.0f, cosf(g_fCameraAngle)));
tbMatrix mCamera = tbMatrixCamera(g_vCameraPosition, vLookAt, bVector3(0.0f, 1.0f, 0.0f));
g_pD3DDevice->SetTransform(D3DTS_VIEW, (D3DMATRIX*)(&mCamera));

D3DLIGHT9 camLight;
ZeroMemory(&camLight, sizeof(D3DLIGHT9));
camLight.Type = D3DLIGHT_SPOT;
camLight.Diffuse = tbColor(1.0f, 1.0f, 1.0f);
camLight.Specular = tbColor(1.0f, 1.0f, 1.0f);
camLight.Direction = g_vCameraPosition - vLookAt;
camLight.Position = g_vCameraPosition;
camLight.Range = 50.0f;
camLight.Theta = 5.0f;
camLight.Phi = 20.0f;
camLight.Falloff = 1;

-----------------------

Danach setze ich das Licht und aktiviere es. Nebenbei: Wenn ich so mit einem D3DLIGHT_DIRECTIONAL Licht arbeite, funktioniert es (oder täuscht das bloß?)

Kann mir jemand helfen? Ich vermute es hängt damit zusammen, dass ich nicht weiß was es mit absoluten Koordinaten auf sich hat?

Vielen Dank und Grüße,
Tobias

Anonymous

unregistriert

2

30.11.2004, 16:39

Falsche Normalvektoren

...also eine Fehlerquelle habe ich schon einmal gefunden: Ich hab die Normalvektoren der Vertices falsch berechnet. Ich mach das alles von Hand, weil ich noch nicht weiß, wie ich das mit irgendwelchen Modellierungswerkzeugen tun kann :-)

Nun habe ich also einen wunderschönen Haufen von Würfeln, einer Lichtquelle vom Typ D3DLIGHT_DIRECTIONAL und einem schwachen Umgebungslicht. Sieht hübsch aus, aber es bleibt die Frage: Was ist eine absolute Position und wie kann ich die in Abhängigkeit meiner Kameraposition berechnen?

Ich möchte so gerne ein Spotlicht haben, das sich immer an der Position der Kamera befindet und in ihre Blickrichtung strahlt.

Kann mir jemand erklären wie ich das erreichen kann?

Danke und Gruß, Tobias

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

3

30.11.2004, 18:19

Zitat


camLight.Direction = g_vCameraPosition - vLookAt;


Ist genau falsch rum. Du willst ja sicher die Richtung VON der Kamera ZUM LookAt?
"Games are algorithmic entertainment."

Anonymous

unregistriert

4

01.12.2004, 12:16

Danke

Zitat von »"Osram"«

Zitat


camLight.Direction = g_vCameraPosition - vLookAt;


Ist genau falsch rum. Du willst ja sicher die Richtung VON der Kamera ZUM LookAt?


Hallo,

oh wie peinlich... Vielen Dank, es funktioniert jetzt.

Gruß, Tobias

Werbeanzeige