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

dx11

unregistriert

1

23.09.2011, 17:53

Mehrer Lichter

Hallo nach langer zeit bin ich auch mal wiede dran.
Meine Frage: Wie kann ich mehrer Lichter in meine Szene setzten? Einmal ein Punktlicht und ein Spotlicht. Die zwei Lichter haben unterschiedliche Farben. Ich möchte quasie, wie eine Taschenlampe mit dem Spotlicht hinbekommen und das Punktlicht ist einfach nur so zur Beleuchtung.
Mit g_pDevice->SetLight(0, &Light); und danach noch g_pDevice->SetLight(0, &Light2); gehts leider nicht. Sehe dann nur Licht1 nicht aber das Pinke Spotlight Licht2.
Wie mache ich das?
Wenn ich nur das Spotlight nehem Funktioniert es ebenso wenn ich nur Das Punklicht nehme.
Meine Grake unterstützt mehrer Lichter.
Danke

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

23.09.2011, 17:55

Du musst auch den Index richtig setzen.

C-/C++-Quelltext

1
2
g_pDevice->SetLight(0, &Light1)
g_pDevice->SetLight(1, &Light2)
@D13_Dreinig

dx11

unregistriert

3

23.09.2011, 18:02

Danke aber geht leider immer noch nicht.
Mein Code:

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
ZeroMemory(&Light, sizeof(D3DLIGHT9));
    Light.Type = D3DLIGHT_SPOT;
    Light.Diffuse = Color(1.0f, 0.0f, 1.0f);
    Light.Ambient = Color(0.5f, 0.0f, 0.5f);
    Light.Specular = Color(0.5f, 0.0f, 0.5f);
    Light.Direction = g_vCameraDir;
    Light.Position = g_vCameraPos;
    Light.Attenuation0 = 0.0f;
    Light.Attenuation1 = 0.0f;
    Light.Attenuation2 = 0.0f;
    Light.Range = 75.0f;
    Light.Falloff = 0.5f;
    Light.Theta = CALC_DEG_TO_RAD( 35.0f );
    Light.Phi = CALC_DEG_TO_RAD( 55.0f );
    g_pDevice->SetLight(0, &Light);

    ZeroMemory(&Light2, sizeof(D3DLIGHT9));
    Light2.Type = D3DLIGHT_DIRECTIONAL;
    Light2.Diffuse = Color(1.0f, 1.0f, 1.0f);
    Light2.Ambient = Color(0.5f, 0.5f, 0.5f);
    Light2.Specular = Color(0.5f, 0.0f, 0.5f);
    Light2.Direction = g_vCameraDir;
    g_pDevice->SetLight(1, &Light2);

EDIT: Color ist gleich D3DCOLOR
Und CALC_DEG_TO_RAD = Degrees to Radiant
g_vCameraDir und g_vCameraPos sind D3DXVECTOR3

DarioFrodo

Treue Seele

Beiträge: 349

Wohnort: Kerkau, 100km nördlich von Magdeburg

Beruf: Selbstständig

  • Private Nachricht senden

4

23.09.2011, 18:09

Musst du das Licht auch aktivieren?
Bei OpenGL z.B. ist nur das erste Licht standardmäßig aktiviert, die anderen nicht.
Erst wenn der letzte Fluss vergiftet,
der letzte Baum gefällt,
der letzte Fisch gefangen,
dann werdet ihr merken, dass man Geld nicht essen kann

Man verkauft die Erde nicht, auf der die Menschen wandeln.

- Indianerweisheiten

Ich bin auch ein einhornimmond ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

23.09.2011, 18:09

Hast du das zweite Licht auch aktiviert? LightEnable.
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.09.2011, 18:10

Und was genau geht jetzt nicht? Hast du beide Lichter auch enabled?

dx11

unregistriert

7

23.09.2011, 18:13

Danke das War's -.-
Jetzt habe ich aber noch ne Frage zu dem Spotlight: Irgendwie ist das so naja grob also das besteht aus riesigen Dreicken wenn man auf eine Wand leuchtet.
Geht das auch Pixel genau mit AA? Oder zumindest sollte es einer Taschenlampe sehr ähnlich kommen.
Danke
EDIT: @dot habe vergessen das 2. Licht einzuschalten -.-

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.09.2011, 18:19

Das liegt daran, dass die Fixed Function Pipeline, die du verwendest, die Beleuchtung nur per Vertex berechnet. Eine Möglichkeit wäre es, deiner Szene mehr Vertices zu verpassen. Das geht natürlich ziemlich in die Performance. "Richtiges" per Pixel Lighting geht nur über Shader. Aber für eine Taschenlampe verwendet man normalerweise sowieso kein "richtiges" Licht, sondern projiziert eine Lichttextur auf die Szene. Stichwort Projective Texture Mapping.

dx11

unregistriert

9

23.09.2011, 18:32

Danke
Und wie kann man eigentlich eine art laterne darstellen?
Auch mit Licht oder? Oder auch textureMapping?
Danke

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

23.09.2011, 18:33

Was genau verstehst du unter einer "art laterne"?

Werbeanzeige

Ähnliche Themen