Skocz do zawartości

Oświetlenie w 3d


Rekomendowane odpowiedzi

przed rysowaniem penelu wywołaj

GML
d3d_set_lighting(false)

a po rysowaniu włącz spowrotem

 

d3d_light_enable(1,true) << to włączaj jednorazowo w create jak światło ma się ciągle świecić. Nie potrzebie zwalniasz działanie gry bo masz to w draw. A i pierwszy index światła to 0 nie 1.

Odnośnik do komentarza
Udostępnij na innych stronach

przed rysowaniem penelu wywołaj

GMLd3d_set_lighting(false)

a po rysowaniu włącz spowrotem

 

d3d_light_enable(1,true) << to włączaj jednorazowo w create jak światło ma się ciągle świecić. Nie potrzebie zwalniasz działanie gry bo masz to w draw. A i pierwszy index światła to 0 nie 1.

 

Mam w Draw:

GML
d3d_set_lighting(false)

d3d_light_define_point(1,obj_player.x,obj_player.y,obj_player.z+8,120,c_white)

d3d_light_enable(1,true)

draw_set_font(fnt_aura)

draw_set_color(c_white)

draw_set_alpha(1)

draw_sprite(spr_HUD1,0,0,556)

//Życie

draw_sprite(spr_Life,0,0,492)

draw_sprite_part(spr_Life,1,4,4,100,100-hp2,4,496)

//Mana

draw_sprite(spr_Mana,0,586,492)

draw_sprite_part(spr_Mana,1,4,4,100,100-mana2,590,496)

//Exp

draw_sprite(spr_HUD_Exp,0,108,551)

draw_sprite_part(spr_HUD_Exp,1,0,0,xp2,5,108,551)

//Mapa

draw_sprite(spr_map,-1,746,546)

draw_sprite_ext(spr_player_map,-1,746,546,1,1,obj_player.direction,c_white,1)

d3d_set_lighting(true)

I dalej to samo

Odnośnik do komentarza
Udostępnij na innych stronach

Kombinuj z kolejnością eventów. Spróbuj d3d_set_lighting() włączać w innym evencie niż wyłączać, przenosić HUD do innych eventów itp. Mi się tak metodą prób i błędów udało wyłączyć oświetlenie w HUDzie. Ten system oświetlenia w GMS jest jakiś porąbany zawsze mi sprawia problemy w GM8.1 wszystko elegancko działało.

Odnośnik do komentarza
Udostępnij na innych stronach

Nie można więcej niż 8 naraz, musisz sobie zrobić jakiś cwany system zarządzania oświetleniem tak by nie przekroczyć tego limitu. Co ze światłami robisz że już osiągnąłeś limit. Ja zwykle używam 2. Direction_light jako słońce, point_light jako pochodnia gracza.

Btw teraz ta gra wygląda dużo lepiej :P

Odnośnik do komentarza
Udostępnij na innych stronach

No to niech tych źródeł sobie będzie więcej niż 8 ale musisz zrobić jakiś system zarządzania taki by na raz świeciło tylko 8 z nich.

 

Lub poszukać jakiegoś rozwiązania wypalania świateł na textury. Na forum yoyogames ludziom udało się takie wypalanie świateł zrobić na surface i shaderach. Poszukaj coś w hasłach "Lighting texture bake", "Baking shadows" itp.

Taki minecraft nie ma dynamicznych oświetleń, postawienie pochodni wypala textury.

 

Edit: Coś znalazłem http://gmc.yoyogames.com/index.php?showtopic=450622

Odnośnik do komentarza
Udostępnij na innych stronach

Jeszcze jedno pytanie: Jak mam w roomie kilka obiektów o_pochodnia to każdy będzie źródłem światła czy tylko ten pierwszy postawiony w roomie?

W GM, jak i w innych silnikach 3D, jest ograniczona liczba źródeł światła. A światło włączasz poprzez funkcję d3d_light_enable. Możesz zrobić dynamiczne przypisywanie świateł obiektom, które są relatywnie widoczne (np. przez różnicę distance pomiędzy graczem a pochodnią). W create pochodni np zmienna "lightId = 0;" i "enabled = false;", która określa ID światła i czy jest aktywne. Zaś w step można sprawdzać odległość np:

GML
if(!enabled && distance_to_object(objPochodnia) <= 100) {

d3d_light_enable(lightId, true);

// inne ustawienia swiatla jak kolor, range etc.

enabled = true;

}

else if (enabled && distance_to_object(objPochodnia) > 100) {

enabled = false;

}

W romie przy creation code pojedynczego obiektu można ustalać różne ID świateł do których pochodnie są przypisane. Dla optymalizacji można powielać ID świateł, ale które są daleko od siebie.
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...