Wpis z mikrobloga

tl;dr: JavaScript vs C++ w symulacjach fizycznych i grafice 3D.
Hej, ostatnio bawię się trochę JavaScriptem i muszę Wam powiedzieć, że mam mocno ambiwalentny stosunek do tego języka - istna love-hate relationship. Jednak muszę przyznać, że język i środowisko uruchomieniowe robi niekiedy dobre wrażenie. Przykład: https://www.youtube.com/watch?v=a1L7k35EHIc Gościu wykorzystał wątki - workery działając w tle do proceduralnego generowania świata 3D, podczas gdy główny wątek bierze na siebie wyświetlanie obrazu. Działa to zaskakująco wydajnie (pewnie spora tu zasługa silnika V8 Chrome i jego JiT kompilatora)
Do czego zmierzam: stoję przed wyborem narzędzia do napisania pracy magisterskiej. Symulacje fizyczne z wizualizacją 3D. (tak, na studiach chcę zrobić po prostu coś fajnego, a co?) Moją ostatnią magisterkę (też symulacje fizyczne - kropka kwantowa, ale bez wizualizacji w 3D i nie w czasie rzeczywistym) lata temu napisałem w czystym C++ i niestety nie skończyło się to dobrze - ostatecznie nie przystąpiłem do obrony - przerosło mnie narzędzie i sam temat. Ostra fizyka kwantowa (było trochę jak w tym memie z psem w laboratorium) i obliczenia numeryczne - ostatecznie nawarstwiające się błędy numeryczne powodowały totalną sieczkę w wynikach, ale nie tylko to...
Chcę uniknąć tych problemów- stąd zabawa JS (na początku w Javie - problemem okazał się mój sprzęt (Intel Iris XE Graphics)i błąd w bibliotece https://www.lwjgl.org/ praktycznie uniemożliwiający mi zabawę z OpenGL). Naturalnym wyborem w takich zagadnieniach jest oczywiście C++, ale - powyższe uwagi - i ogromna złożoność i niskopoziomowość tego języka - ile trzeba się napocić, żeby wyświetlić głupi trójkąt w OpenGL - odsyłam do tego tutka: https://learnopengl.com/Getting-started/OpenGL
No i tak natrafiłem na bibliotekę https://threejs.org/ i kanał tego pana, którego filmik podlinkowałem wyżej. Nie będę ukrywał, że robi to na mnie piorunujące wrażenie. To jest to (chyba)! Pytanie do Was. Macie jakieś doświadczenia w używaniu JS w obliczeniach w czasie rzeczywistym, wielowątkowych, numerycznych, z wizualizacją w 3D. Możecie coś polecić? Może inny język? Python? Czy ostatecznie zacisnąć zęby i przykleić się do tego C++?
#javascript, #c++, #opengl, #metodynumeryczne, #grafika3d, #fizyka
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@gacek_wilkooki: js nie nadaje się w żadnym stopniu, threejs jest przydatne w wizualizacjach, ale jakiekolwiek bardziej złożone obliczenia będziesz chciał wykonywać i node się wyłoży.

Co bym proponował to rozbicie problemu na dwa -
obliczenia,
  • Odpowiedz
@Przegrywek123: Rzecz w tym, że obliczenia muszą być wykonywane w czasie rzeczywistym, z tego co się orientuję Matlab nie daje takich możliwości. (Simulink?) Ale podsunąłeś doby pomysł - podzielić projekt na dwa podsystemy - symulacja i wizualizacja. Pierwszy w C++ i biblioteki do numerycznego liczenia równań różniczkowych (boost? https://www.boost.org/doc/libs/1_65_1/libs/numeric/odeint/doc/html/boost_numeric_odeint/odeint_in_detail/steppers.html). Drugi w JS do ogarnięcia grafiki w 3D. Jakaś komunikacja pomiędzy nimi na zasadzie klient-serwer. Nie wiem tylko czy to nie
  • Odpowiedz
@gacek_wilkooki: v8 to jest silnik. node / przeglądarka to są runtime / środowiska uruchomieniowe właśnie - których będziesz potrzebował do wizualizacji. Imo jak tak, to pytanie rozbija się o to jak skomplikowane są to obliczenia. W teorii do node masz bindingi do np. CUDA toolkit - ale nie używałem tego, i nie wiem na ile wydajne to jest. Można też to zrobić przy uzyciu workerów po prostu - ale nigdy
  • Odpowiedz
@Przegrywek123: Im dłużej o tym myślę, tym bardziej skłaniam się do C++ jednak. Zbyt duże ryzyko. Chodzenie na skróty, może się zemścić. Ponadto nadarza się okazja, aby nauczyć się porządnie tego języka - czasu mam sporo - co samo w sobie może okazać się przydatne.
  • Odpowiedz
@gacek_wilkooki: wiesz co, na twoim miejscu zrobiłbym najprostszy możliwy POC w JS. Napisz te swoje obliczenia (bez wizualizacji) w JS, odpal na node i zobacz wydajność. Jak będzie c-----a, to przepiszesz na c++ - jak git, to będziesz kontynuował.

Bo imo kwestia rozbija się tylko o to
  • Odpowiedz