Autor Wątek: Irrlicht - Falowanie tekstury  (Przeczytany 3817 razy)

Offline kampar

  • Użytkownik

# Luty 05, 2012, 14:26:46
Wyświetlam sześcian, którego każda ściana jest osobnym modelem (prostopadloscianem). Te sześć ścian ściśle do siebie przylegają (dla każdej osobno ustawiam pozycje i rotacje). Każda ściana z zewnątrz ma kolor zielony, a wewnątrz niebieski. No i gdy oddalam kamerę od sześcianu to krawędzie tekstury na ścianie zaczynają falować i widać wtedy kolor niebieski. Dlaczego tak się dzieje i jak temu zaradzić.
Ściany mam z pliku (.3ds), robiłem je w blenderze i oryginalna odległość między bokami ściany wynosi 0.04. Tekstura jest w .png i nakładam ją przez irrlichta.

Screen:
http://imageshack.us/photo/my-images/407/irrlicht.png/

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline toxic

  • Użytkownik

# Luty 05, 2012, 15:54:28
Jedno pytanko, bo nie jestem pewien, czy dobrze zrozumiałem: każda ściana jest prostopadłościanem, czy kwadratem?

Offline radsun

  • Użytkownik
    • CaRpg

# Luty 05, 2012, 16:05:56
Może włączenie backface culling pomoże. Albo dałeś złe wartości znear, zfar?

Offline ConayR

  • Użytkownik

# Luty 05, 2012, 16:21:58
A to nie jest z-fighting przypadkiem? Nie jest tak, że nie tylko wewnętrzne ścianki są niebieskie, ale i te na obwodzie też? Mój niesamowity ms paint skill to wyjaśnia:



Lewa ilustracja pokazuje jak złożony jest Twój sześcian i kolory ścianek (strzałkami zaznaczyłem kolory większych, niewidocznych powierzchni). Problemem jest to, jak składasz całość (prawa ilustracja). W niektórych miejscach masz dwa lub trzy quady o tym samym równaniu płaszczyzny. W wyniku tego w kilku miejscach karta musi zdecydować, czy pokazać zielony, czy niebieski kolor. To, który kolor będzie widoczny w jakim pikselu zależy od zaokrągleń przy obliczeniach, co z kolei zależy od kąta patrzenia kamery. Generalnie jeśli w jednym miejscu masz dwa trójkąty współpłaszczyznowe, należy oczekiwać takich efektów.

Nie mówiąc już o tym, że budowanie sześcianów w ten sposób to marnowanie zasobów GPU, pamięci i przepustowości. ;]
« Ostatnia zmiana: Luty 05, 2012, 16:23:46 wysłana przez ConayR »

Offline kampar

  • Użytkownik

# Luty 05, 2012, 21:07:24
@toxic
Każda ściana jest prostopadłościanem o podstawie kwadratu.

@radsun
Muszę mieć możliwość obracania kamery wokół modelu więc wszystko powinno być cały czas widoczne. Zmieniałem wartość bufora Z  z 16 na 32 i nic to nie dało.

@ConayR
Niestety to nie jest to. Nie pisałem o tym, ale efektem końcowym nie jest pełny sześcian. Program ma za zadanie pokazanie animacji składania się siatki do sześcianu. Ściany sześcianu nie nachodzą na siebie tylko przylegają krawędziami. Tutaj mój rysunek:
http://imageshack.us/photo/my-images/41/animacja.png

Tutaj mamy dwie ściany widziane z boku podczas animacji. Tak mniej więcej wygląda animacja wszystkich ścian, więc końcowy sześcian ma ucięte krawędzie, które zaznaczyłeś na drugim rysunku.

Offline toxic

  • Użytkownik

# Luty 05, 2012, 22:13:47
Hm... to ja się chyba poddam. Chociaż jeszcze spytam: a jakiego renderera każesz irrlichtowi używać przy starcie? Przypadkiem nie jakiegoś software'owego?

Offline ConayR

  • Użytkownik

# Luty 05, 2012, 22:51:58
Jesteś na 100% pewien, że obracasz wokoło wewnętrznej, wspólnej krawędzi, a nie zewnętrznej? Ogólnie jednak: zdebuguj sobie piksel. Nie wiem czym w OGL (glslDevil? gDEBugger?), ale w DX odpalasz PIX i dowiadujesz się z miejsca, dlaczego dany piksel jest taki, a nie inny. :)

Offline kampar

  • Użytkownik

# Luty 06, 2012, 21:42:29
Używam EDT_OPENGL.

Niestety zbytnio nie wychodzi mi posługiwanie się tymi programami. Jeśli ktoś mógłby to niech zobaczy czy u niego także ten błąd występuje, bo może to wina sprzętu.

http://www.sendspace.pl/file/3e7b45a3563d2b461686907

Offline Liosan

  • Redaktor

# Luty 06, 2012, 22:08:25
U mnie wszystkie ścianki są niebieskie :) Zielone są w środku.

Liosan

Offline kampar

  • Użytkownik

# Luty 07, 2012, 12:06:27
tak, ponieważ to jest jeden z programów testowych, na których eksperymentowałem różne funkcje. Chodzi o to czy podczas ruszania kamerą i oddalania się tekstura na krawędziach się zniekształca

Offline Liosan

  • Redaktor

# Luty 07, 2012, 18:24:38
Duh, ruszałem kamerą, oddalałem itp i nic się nie wydarzyło. Bardziej mi chodziło o to, że wcześniej pisałeś że na zewnątrz są zielone. Zmieniłeś coś?

Liosan

Offline kampar

  • Użytkownik

# Luty 07, 2012, 20:24:39
no to możliwe, że to problem karty graficznej. Nic nie zmieniałem co mogło wpłynąć na działanie programu. Wcześniej pisałem, że na zewnątrz jest kolor zielony, ponieważ tak mam w "głównym" programie, tutaj tylko jest inna tekstura.

Offline ConayR

  • Użytkownik

# Luty 07, 2012, 23:33:17
Zdebuguj piksel! :) Debugując na karcie, na której napotkałeś problem, zobaczysz co ona liczy źle i jak to obejść. ;]