SeaMonster131 Temat założony przez niniejszego użytkownika |
[Irrlicht] Oświetlenie zwykłego plane » 2012-10-11 19:20:05 Witam Moim problemem jest oświetlenie płaskiej powierzchni, tj "plane". Tworzyłem sobie teren (grid 100x100) w Blenderze, zapisywałem go i oświetlenie działało dobrze. Niestety z powodu kolizji fps było na poziomie ok 40. Dlatego usunąłem zbędne wierzchołki (tak na oko :P) uzyskując coś takiego: http://scr.hu/0ug/fuqy9Więc jak widać, na środku terenu jest po prostu zwykły plane. Tym razem było już ~400 fps. Niestety po dodaniu światła uzyskałem coś takiego: http://scr.hu/0ug/ad57zTam gdzie są wierzchołki, tam jest oświetlenie, natomiast plane jest nieoświetlony. Światło tworzę w ten sposób: ISceneNode * nodeLight = man->addLightSceneNode( 0, vector3df( 0, 1000, 0 ), SColorf( 1.0f, 0.0f, 0.0f, 1.0f ), 100000.0f );
nodeLight = man->addLightSceneNode( 0, vector3df( camera->getAbsolutePosition().X, camera->getAbsolutePosition().Y + 5000, camera->getAbsolutePosition().Z ), SColorf( 1.0f, 1.0f, 1.0f, 0.0f ), 500.0f );
Macie jakiś pomysł, co mogę zrobić? |
|
ison |
» 2012-10-11 19:36:05 Dziwne, że był aż taki spadek fps. Użyłeś OctTreeSceneNode czy zwykłego? Terenu nie wczytuj jako model. Irrlicht wspiera heightmapy wczytywane z pliku (jako obrazek z wysokościami). Co jest nie tak w tym oświetleniu? To czarne to trawa? Wygląda na to, że normale są skopane. |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-10-11 19:42:18 Dziwne, że był aż taki spadek fps. Użyłeś OctTreeSceneNode czy zwykłego? |
Użyłem zwykłego, ponieważ przy tym OctTree teren był niepoprawnie wyświetlany, a nie znalazłem rozwiązania na to :P A kod był żywcem skopiowany z tutka. Terenu nie wczytuj jako model. Irrlicht wspiera heightmapy wczytywane z pliku (jako obrazek z wysokościami). |
W sumie mógłbym tak zrobić. A będzie jakaś różnica w wydajności? Co jest nie tak w tym oświetleniu? To czarne to trawa? Wygląda na to, że normale są skopane. |
Tak, to czarne to trawa - ten wielki prostokąt, tj plane. Co do normali, to dotychczas załatwiało sprawę: terrain->setMaterialFlag( EMF_NORMALIZE_NORMALS, true ); |
|
ison |
» 2012-10-11 19:55:07 Jak niepoprawnie był wyświetlany? Różnica w wydajności powinna być, poza tym zaoszczędzisz miejsce. Zobacz czy ten plane da się oświetlić od dołu. Ustawiłeś setMaterialFlag( EMF_LIGHTING, true ); ? |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-10-11 20:01:07 Omg.. Kiedy zwiększyłem intensywność światła do 100000000.0f to teren został oświetlony w całości.. A ja tu już kilka godzin się na tym głowię, jak tu rozwiązanie jest takie proste -.- Jak niepoprawnie był wyświetlany? |
Był..podzielony na kwadraty, coś takiego: | | | ----- | | | ----- itd. I te kwadraty był puste, jedynie było widać te linie między nimi jak na rysunku oraz kwadrat na którym się stało był "pełny". Różnica w wydajności powinna być, poza tym zaoszczędzisz miejsce. |
Dobrze wiedzieć :) |
|
ison |
» 2012-10-11 20:04:22 itd. I te kwadraty był puste, jedynie było widać te linie między nimi jak na rysunku oraz kwadrat na którym się stało był "pełny".
|
gdzieś ustawiłeś zły zfar, irrlicht uznawał, że te niewidoczne kwadraty są poza zasięgiem widzenia |
|
SeaMonster131 Temat założony przez niniejszego użytkownika |
» 2012-10-11 20:10:52 Oo, nie wiedziałem o tym. No dobra, to zaraz to zrobię. Dzięki wielkie @ison :) |
|
« 1 » |