animacja 3D w stylu opengl

0

W czym napisać szybko animację 3D, która będzie działać bezpośrednio w przeglądarce?
Może np. javaScript coś takiego ogarnia?

EP
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:122
0

WebGL, czyli implementacja OpenGL w JavaScripcie.


Wenn ist das Nunstück git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:26 minut
  • Postów:6648
0

Unity, eksport do WebGL. Można szybko zrobić animację. W nowej wersji dodali nawet timeline (narzędzia do przedstawiania historyjek).


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8411
0

sam WebGL jest dość niskopoziomowy, ale można użyć np. biblioteki Three.js, żeby to sobie uprościć.


0

Ten WebGL nie działa mi poprawnie - na wypasionym desktopowym PC!, więc to jakachś niedoróbka (kolejna reklamówka zapewne).

A gdyby nawet to działało, to przecież i tak nie nam bladego pojęcia jak w tym programować, bo to nie jest opengl, lecz jakiś porąbany kolon gl-podobny.

Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:26 minut
  • Postów:6648
0

Nie musisz za dużo programować, użyj Unity - WebGL jest tam obsłużony za Ciebie, to co zobaczysz w edytorze Unity zobaczysz na stronie internetowej.

Czystego WebGL też można się nauczyć, tylko zamiast kursu OpenGL należy skorzystać z kursu WebGL ;)


🕹️⌨️🖥️🖱️🎮
0
walicja napisał(a):

Ten WebGL nie działa mi poprawnie - na wypasionym desktopowym PC!, więc to jakachś niedoróbka (kolejna reklamówka zapewne).

Np. widok 3D w mapach google jest na tym oparty i potrafi działać O na dość zabytkowych sprzętach. Może problem sterowników.
https://www.google.pl/maps/@52.2327804,21.0170685,146a,35y,263.2h,78.98t/data=!3m1!1e3

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
2
walicja napisał(a):

Ten WebGL nie działa mi poprawnie - na wypasionym desktopowym PC!, więc to jakachś niedoróbka (kolejna reklamówka zapewne).

Jaka grafika, jaka przeglądarka, jakie sterowniki.

walicja napisał(a):

W czym napisać szybko animację 3D, która będzie działać bezpośrednio w przeglądarce?
Może np. javaScript coś takiego ogarnia?

A gdyby nawet to działało, to przecież i tak nie nam bladego pojęcia jak w tym programować, bo to nie jest opengl, lecz jakiś porąbany kolon gl-podobny.

Najpierw pytasz o 3D pod javascriptem, dostajesz odpowiedź pozytywną, i od razu narzekasz że to nie jest OpenGL tylko „porąbany kolon”. Może zajmij się czymś innym w takim razie.

0

Najpierw pytasz o 3D pod javascriptem, dostajesz odpowiedź pozytywną, i od razu narzekasz że to nie jest OpenGL tylko „porąbany kolon”. Może zajmij się czymś innym w takim razie.

Problem w tym że mogę znaleźć przykładowej strony - html z tym WebGL.
Np. wchodzę tu: WebGL samples:
http://webglsamples.org/

no i tu niestety nie ma śladu kodu, a jedynie obrazki.

0

Poza tym nie znam się na tych shaderach, które są tam chyba konieczne.

Chodzi mi o proste rysowanie brył, np. rura, dętka, kula, śruba, itp.;
i z prostym oświetleniem, włączanym zwyczajnym glLamp.

EP
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:122
0

A nie chodzi Ci przypadkiem o takie funkcje jak glLoadIdentity, glMultMatrix, glTranslate, glRotate, glVertex itp? W takim razie nie zaznasz ich w WebGLu, ponieważ przynajmniej od dekady są one przestarzałe i niezalecane, a WebGL jest znacznie nowszy. Teraz używa się, jak słusznie zauważyłeś, shaderów, tablic wierzchołków które wysyła się bezpośrednio do GPU i tak dalej, a nie rzeźbi każdy pojedynczy wierzchołek za pomocą glVertex.

https://stackoverflow.com/questions/3327267/where-are-all-the-simple-functions-gone-in-webgl


Wenn ist das Nunstück git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!
edytowany 1x, ostatnio: EntityPamerano
0
walicja napisał(a):

Poza tym nie znam się na tych shaderach, które są tam chyba konieczne.

Użyj three.js - tam są już przygotowane typowe. Prosty przykład:
https://threejs.org/examples/#webgl_geometry_cube

0
EntityPamerano napisał(a):

A nie chodzi Ci przypadkiem o takie funkcje jak glLoadIdentity, glMultMatrix, glTranslate, glRotate, glVertex itp? W takim razie nie zaznasz ich w WebGLu, ponieważ przynajmniej od dekady są one przestarzałe i niezalecane, a WebGL jest znacznie nowszy. Teraz używa się, jak słusznie zauważyłeś, shaderów, tablic wierzchołków które wysyła się bezpośrednio do GPU i tak dalej, a nie rzeźbi każdy pojedynczy wierzchołek za pomocą glVertex.

https://stackoverflow.com/questions/3327267/where-are-all-the-simple-functions-gone-in-webgl

Ah, tak!
No to narysuj mi np. obracany swobodnie, i oświetlany purpurowym światłem, torus w tym nowoczesnym minigl.

EP
Nie zdajesz sobie sprawy jak wolne jest glVertex w porównaniu do współczesnych metod renderowania :D
0
zz napisał(a):
walicja napisał(a):

Poza tym nie znam się na tych shaderach, które są tam chyba konieczne.

Użyj three.js - tam są już przygotowane typowe. Prosty przykład:
https://threejs.org/examples/#webgl_geometry_cube

Narysuj mi złotą kotwicę, która się obraca np. dookoła osi: 1,2,3, no i błyszczy jak należy, bo jest oświetlana... światłem - takim słońcowym. :)

0

Nie zdajesz sobie sprawy jak wolne jest glVertex w porównaniu do współczesnych metod renderowania :D - EntityPamerano dziś, 18:54

Zdaję sobie bardzo dobrze sprawę.
Np. przy 100 wierzchołkach na bryle mam około 32 fps;
natomiast po podzieleniu tego do 10000 wierzchołków mam.. 32 fps.

I jest tak przy zwyczajnym timerze, ustawionym na 30 ms... karta graficzna pracuje na 10%, bo nawet nie zwiększa częstotliwości (pracuje w trybie idle - na 10% mocy, czyli z 3W).

EP
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Postów:122
0

32 klatki to akurat na pewno nie wina OpenGLa, nawet używając glVertexów. Stawiam że to problem z timerem, zawsze jak pisałem grę to miałem jakąś pętlę główną która co iterację generowała klatkę, nie używałem do tego żadnych timerów. Chyba że piszesz w jakimś QT, tam nie wiem jak to rozwiązać inaczej, nie zajmowałem się tym głębiej.


Wenn ist das Nunstück git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
0
EntityPamerano napisał(a):

A nie chodzi Ci przypadkiem o takie funkcje jak glLoadIdentity, glMultMatrix, glTranslate, glRotate, glVertex itp? W takim razie nie zaznasz ich w WebGLu, ponieważ przynajmniej od dekady są one przestarzałe i niezalecane, a WebGL jest znacznie nowszy. Teraz używa się, jak słusznie zauważyłeś, shaderów, tablic wierzchołków które wysyła się bezpośrednio do GPU i tak dalej, a nie rzeźbi każdy pojedynczy wierzchołek za pomocą glVertex.

Poruszyłeś kilka spraw które ludzie zwykle wrzucają właśnie do jednego wora, a które w OpenGL pojawiły się wcale niejednocześnie.

Tablice wierzchołków weszły do standardu OpenGL 1.1, czyli są prawie od początku. Nie trzeba więc „rzeźbić każdego wierzchołka”.
Wysyłanie bezpośrednio do GPU (vertex buffer objects) to OpenGL 1.5.
Shadery (GLSL) weszły w wersji 2.0.
Wbudowane transformacje macierzowe stały się “deprecated” w wersji 3.0.

Najbardziej niezrozumiała jest dla mnie ta zmiana ostatnia (glTranslate, glRotate), bo nic nie dodała tylko usunęła i to nie dając żadnej alternatywy. Na dodatek usuwa rzecz potrzebną, przez co każdy musi sobie znaleźć bibliotekę zastępczą albo oprogramować matematykę samemu (albo olać core profile i zrobić to w stylu 2.x). To nie była mądra zmiana.

Nie ma jednego „starego” i jednego „nowego” OpenGL-a. OpenGL to jest taki ruchomy cel. Nigdy nie wiesz czy twoja ulubiona funkcja nie okaże się “deprecated” w następnej wersji. Zresztą tej następnej, najnowszej wersji i tak nie będzie można użyć, bo zanim będzie wystarczająco szeroko wspierana przez karty graficzne i sterowniki to miną lata, a w międzyczasie wyjdzie kolejna wersja. Powodzenia życzę komuś kto dziś wyda gierkę czy program wymagający najnowszej wersji 4.6 gdzie są sterowniki tylko Nvidii i to beta.

edytowany 1x, ostatnio: Azarien
0
EntityPamerano napisał(a):

32 klatki to akurat na pewno nie wina OpenGLa, nawet używając glVertexów. Stawiam że to problem z timerem, zawsze jak pisałem grę to miałem jakąś pętlę główną która co iterację generowała klatkę, nie używałem do tego żadnych timerów. Chyba że piszesz w jakimś QT, tam nie wiem jak to rozwiązać inaczej, nie zajmowałem się tym głębiej.

Przy ustawieniu timera na 30ms (takim z Windows api) masz 1000/30 = 33.333 komunikatów na sekundę,
co daje tyle samo fps podczas rysowania, ale przy zerowym czasie obliczeń!

Ty chcesz rysować to non-stop - tak w pętli, co dałoby powyżej 1000 fps;
ale niestety maksimum to 60 fps zazwyczaj, bo monitor nie nadąży (ani też oko tego nie zarejestruje - filmy są robione zwykle z 24 fps zaledwie!).

0

Odnośnie tych: glVertex, glNormal, itp., no to ja nie potrzebuję tego.

Nawet łatwiej byłoby to robić seriami, czyli za pomocą gotowych tablic, które tworzą od razu 100 czy 1000 trójkątów!
Ale to nie powinno być robione w prostszy sposób - nie tak jak to sobie wymyślono w gl 1.1!

Wystarczyło tak coś w tym stylu:
glVertex(p, 1000);
glNormal(n, 1000);
itd.

wrzucamy od razu 1000 wierzchołków (w jakimś tam trybie: quads, triangles, itd., który może być nadal ustawiany tradycyjnie: glBegin(mod),
bo to jest i tak tylko jedno wywołanie...

No i po co komu te pierdoły z gl..array, glPointer.. ble sre?
Zapewne komuś się coś tu grupo po... mieszało w główce.

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
0
walicja napisał(a):

ale niestety maksimum to 60 fps zazwyczaj, bo monitor nie nadąży (ani też oko tego nie zarejestruje

Nie wiem jak to wygląda w WebGL, ale w desktopowym OpenGL nie robi się tego na timerze. Rozwiązaniem jest vsync, czyli synchronizacja z odświeżaniem monitora. Do tego służy funkcja wglSwapIntervalEXT.

Ale to nie powinno być robione w prostszy sposób - nie tak jak to sobie wymyślono w gl 1.1!

No ale tak nie jest, jest trudniej. Gdy używamy VBO (vertex buffer objects) robi się jeszcze trudniej, a gdy używamy VAO (vertex array objects) jeszcze trudniej. Od wersji bodajże 3.3 (Core Profile) użycie VAO staje się obowiązkowe. To jest właśnie ten „ruchomy cel”: coś znika, coś się pojawia, coś się pojawia a potem znika, coś się staje wymagane itp.

0
Azarien napisał(a):
walicja napisał(a):

ale niestety maksimum to 60 fps zazwyczaj, bo monitor nie nadąży (ani też oko tego nie zarejestruje

Nie wiem jak to wygląda w WebGL, ale w desktopowym OpenGL nie robi się tego na timerze. Rozwiązaniem jest vsync, czyli synchronizacja z odświeżaniem monitora. Do tego służy funkcja wglSwapIntervalEXT.

Mam zamiar robić proste animacje - symulacje fizyki w 3D, a nie żadne gry,
więc nawet i 10 fps mi w zupełności wystarczy.

No ale tak nie jest, jest trudniej. Gdy używamy VBO (vertex buffer objects) robi się jeszcze trudniej, a gdy używamy VAO (vertex array objects) jeszcze trudniej. Od wersji bodajże 3.3 (Core Profile) użycie VAO staje się obowiązkowe. To jest właśnie ten „ruchomy cel”: coś znika, coś się pojawia, coś się pojawia a potem znika, coś się staje wymagane itp.

Jakoś nie przypominam sobie żeby np. w c++ coś znikało w kolejnych wersjach.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)