3D-s weblap

Sziasztok!

Olyan weboldalt szeretnék, amely komplex 3D-s ábrákat tartalmaz (pl.: origami figurákat), az egyes objektumokra a térben való mozgással lehet ráközelíteni. Szerintetek milyen technológia a legalkalmasabb erre a célra? (Böngészőkben való kompatibilitás, sebesség, minőség, illetve a sz*pás mennyisége tekintetében)

Hozzászólások

flash, canvas, webgl.

Ha a flashez ertesz, az a legkevesebb, meg talan vannak kesz modulok is. Szopasmennyiseg minimal ha ertesz hozza, bongeszotamogatas nagyon jo, sebesseg gyenge.

Canvas eseten html5 origami lesz a kulcsszavad, valamik vannak. Szopasmennyiseg kozepes, bongeszotamogatas "vegulis van", sebesseg jo, amig nem csinalsz "igazi" 3d-t merthogy 3x2-es matrixod van csak.

WebGL-be lehet mindenfele dolgokat importalni szopasmennyiseg maximum, bongeszotamogatas minimum, viszont gyors.

gondolom ugyanazt a rendszert használja, mint az opnengl, csak z koordináták nélkül.
azért van a 3. oszlop, mert így oldják meg az elmozgatást.
pl translate(20,0) (mozgassuk el az x tengelyen 20 egységgel) ez mondjuk hattatva van a (2,1) koordinátán elhelyezkedő pontra. (aminek a valós koordinátái emiatt (2,1,1) ahol az utolsó egy arányossági tényező (általában 1) glVertx4f-ben ez a negyedik koordináta)

        (2)
        (1)
        (1)
(1 0 20)
(0 1  0)

Az eredmény (2+0+20,0+1+0) = (22,1) tehát, amit szerettünk volna.

De persze ha megírod a saját raster függvényeidet, akkor nincs ilyen limit. gyakorlatilag bármit lehet, amit elbír a cpu.
(lásd például lentebb a gömböt)

--------------------------------------
Unix isn't dead. It just smells funny.

Igen, jol irtak az elottem szolok, bocs: szoval nem tudsz trapezt csinalni egy teglalapbol egyetlen mozdulattal, a 3d-s torzulast csak darabokban tudod kiszamolni, mig ha lenne rendes 4x4 matrixod mint az opengl-ben, akkor egyetlen mozdulattal megoldhato.

Pl., ahol nekem ez elojott: van egy panoramakeped amivel korbeforoghatsz de mindig csak egy darabjat latod, es azt a hatast kell elerned, hogy a szelein levo elemek nagyobbak legyenek, mert a nezohoz kozelebb vannak (de az eredeti korbeforgatott kamera ugye sikvetitesu volt). Ezt 3d-ben rohogve, itt oszloponkent.

ezt nem is értem, ha már vették a fáradságot, hogy belepakoljanak egy ilyen grafikus alrendszert, egy fokkal nem lett volna bonyolultabb egy normális 3d-s rendszert csinálni 4x4-es mátrixokkal.

---
http://xkcd.com/258/

Apple MacBook Pro 13"
C2D 2.26GHz/3MB | 4GB@1067MHz | 160GB@5400rpm SATAII

HTML5 canvas-on azt csinálsz, amit akarsz.
És elég sok böngésző támogatja már.
Itt egy gömb raymarcholva:

http://bencef.web.elte.hu/sphere/

--------------------------------------
Unix isn't dead. It just smells funny.

nezd meg a jobb oldali reszen a kek hazikot,ez szerintem olyasmi amit szeretnel csak feluletek es kitakaras nelkul.
Viszont megy html5 nelkul, ismereteim szerint megy minden bongeszon,igaz ie ala meg kellett irnom a megjelenitest kulon
ha tetszik hasznald egeszseggel,ha fejlesztesz bele feluleteket is, es elkuldd,azt meg kulon megkoszonom.

http://dlt.fmt.bme.hu

Az remelem megvan, hogy a "HTML5" mizeria valahol ott indul, hogy az adobe opensource-olta a flash VM-jet (a Tamarint), amit a mozilla egyfelol atkovacsolt a testvernyelv JS-re, masfelol a Google-nel addig nezegettek, amig elo nem alltak valami jobbal, es hat elobb-utobb az Adobe is kenytelen volt bedobni a torulkozot.

Minden tiszteletem a flash-e. Sikerult egy elterjedt, tenyleg nagyjabol operacios-rendszer fuggetlen, megis egyseges platformot letrehozni, ami kepes volt termek maradni. Semmi gond ezzel.

Azt gondolom azonban, hogy praktikusan a JIT-es JS a flash utodja, amit hivhatunk HTML5-nek is, es bar abuzalni mindent lehet (a flasht is), onmagaban nem lassabb, csak ha szarul irjak meg.

Azert nem lassabb, mert ugyanonnan indul, es a nyitott fejlesztes meg a sok ipari erdeklodo miatt sokkal tobb optimalizacio tud belekeruli.

"...onmagaban nem lassabb, csak ha szarul irjak meg."

Szerintem ez a kulcsmondat. Lehet bármilyen über-frankó az adott platform, ha szar kódok születnek rá (márpedig az átlag grafikus+scripter / webdevel nem fog jó kódot írni; persze nekem is van hova fejlődnöm), addig a user azt fogja mondani a HTML5-re (JS-re), hogy ez szar, lassú, leég miatta a fanszőrzetem, ha az ölemben van a laptop, de jó is volt a Flash (azt legalább könnyen lehetett akár egyesével tiltani) stb.

Szerk: 1 db oldal esetében semmi gond azzal, ha megeszi a processzor 5-10%-át. Van ilyen. De ez 10-20 tabnál (ami nem ritka manapság), már elég kellemetlen tud lenni a dolog. Ld. még: "a RAM azért van hogy használjuk" - "a CPU azért van, hogy használjuk"

Nezd, a flash is aze' lassu mert nem tudnak benne kodolni, ill. voltak technikai adottsagok, amiket csak a proci szarraporgetesevel tudtak megoldani, ez a hatranya az abszolut platformfuggetlensegnek.

Amit en legutobb nagy js ficsort irtam, az ugy volt beallitva, hogy meg lehetett adni neki egy memorialimitet, mi ezt 10 megaban adtuk meg, es volt egy szep hosszan futo makros unittesztunk, ami 20 percig minden letezo gombot megnyomogatott, meg piszkalta a rendszert, mikozben folyamatosan nezte a memoriafoglalast.

Vagy pl. Andrea azt csinalta a m.maps.nokia.com -on, hogy a rendszer nem lepi tul a 8 megas limitet, mert akkor az iOS 4 iPad-valtozata elkezd megbizhatatlan lenni -> kezi garbage collection. Hogy miket talal ki forditooptimalizalasra, azt nem ecsetelem, elborzadnal a "hogyan sporoljunk meg ket bajtot a minimizernek" trukkokon, demoscene-ben lattam utoljara ilyeneket.

Az ilyen appokkal nem szokott nagy teljesitmenypara lenni. Valamennyi ramot hasznalni kell, valamennyi procit hasznalni kell, nincs mese, tenyleg azert van hogy hasznaljuk (most siman lefoglalok a user gepebol vagy 200 megat, de ez egy vallalati app, kotelezoen minimum 2 giga ram van a gepekben, ismert configok, es bar tiltva nincs, nem igazan youtube-oznak mellette az emberek, nincs ra idejuk... itt ez a gep erre van hogy ezt az appot hasznaljak, innentol kezdve nem ovatoskodom annyit)

De ehhez elsosorban tehetseg (Andrea reszerol mindenkepp) kell, odafigyeles (senki nem kerdezte, hogy akarok-e a memoriafoglalassal foglalkozni), eleg jo ismeretek (egyszeruen melyen kell ismerni a dolgokat, sok retegen keresztul), es jo eszkozok (pl. egy closure compiler, egy Google Speed Test, leakkeresok, profilerek). Ez nem egyszeru, es neha ossze is keverednek egymassal.

Aki ért hozzá, az ért hozzá, ezzel nem is vitáztam:)

De nézd meg a Google Wave-et. Azt se általános iskolások csinálták, mégis bűn lassú volt (oké, azóta már fejlődött a JS futtatása). Vagy ott van a Google kereső, ami mostanában a legjobban idegesít. Elkapja a backspace-t, bugos, szar. Egyszerűen nem ergonómikus. Hiába nem vagyok fókuszban, elkapja. Flashnél legalább egyértelmű, hogy most a böngésző, vagy a Flash plugin az, ami aktív.

> Hogy a javascriptet ne kelljen megtanulnia a java-programozoknak.
IMHO nem ezért van GWT. Hanem azért, mert olyan technológiai stack kiterjedt, robusztus webalkalmazások fejlesztéséhez, ami az ilyenkor szükséges 5-6 technológia helyett 1-et kíván meg.

1) Kinézet: HTML, CSS helyett --> Java (GWT toolkit)
2) Kliens oldali vezérlés: JavaScript helyett --> Java
3) Valamilyen RPC megoldás, ajax, stb. helyett --> Java (GWT-RPC, java interfészekkel)
4) Szerveroldali logika: PHP, Ruby, Basic taknyolás helyett --> Java (Pl.: Beanek)
5) Perzsizstencia réteg: SQL helyett --> Java (JPA)

Ha valaki csinált már picit is komplexebb rendszert, akkor a fenti öt pont mindegyikét kellett mozgósítania, márpedig azok mind-mind külön nyelveken és technológiákkal történtek*. A GWT Ilyenkor nagy segítség tudott lenni.

Másrészt, az ilyenkor szintén előforduló probléma a dinamikus nyelveken történő taknyolás. Általában sokan jutnak egy ilyen projektre, akik nem mind 110%-os profik, és a dinamikus nyelv az ilyenek keze alatt mindig egy tákolmányhoz vezet. Meg a biztonságtalan deployálás (szintaktikailag helyes a kód? futtattak unit teszteket?) is itt van, és kész a spagettikódok miatt beálló szoftverkrízis. A Java ezzel szemben erősen, statikusan típusos nyelv. Egy maven-es deploy workflow-val megsegítve pedig a fos már el sem folyik a szerverig.

Na de a mondandóm lényege: a Wave tényleg el lett szúrva, és én sem láttam még jól megépített GWT-s alkalmazást. Én magam egy társammal készítettem egy tisztességes méretű rendszert GWT + Ext-GWT alapon, kb. 25k sor a kód, és egy hónap alatt lett kész, jelenleg 1500-2000 (nem informatikus) felhasználója van. Ez sem a szép-jó példa, mivel nincsen agyontesztelve (időszűke miatt nem is lehetett), viszont enélkül a technológia nélkül nem sikerült volna.

A hiányzó killer GWT-s appok szerintem nem a JAVA vagy a GWT hiánya. Viszont webes "célszoftver" (sokfelhasználós, általában belső rendszerek) fejlesztésénél nem is gondolkodnék Zendes, Railses játékokban, hanem újra a GWT-architektúrát választanám.

*: persze vannak más (dinamikus) nyelvekhez is ORM meg gui toolkit implementációk, de azok a JEE-ben megtalálható egységességhez képest nem túl meggyőzőek. RPC-t csinálni GWT-vel pedig egy álom. Igazából zéró fejlesztési overheadje van. Olyan egyszerű használni, mint a printf-et C-ben. (1 include)

Ez:

1) Kinézet: HTML, CSS helyett --> Java (GWT toolkit)
2) Kliens oldali vezérlés: JavaScript helyett --> Java
3) Valamilyen RPC megoldás, ajax, stb. helyett --> Java (GWT-RPC, java interfészekkel)
4) Szerveroldali logika: PHP, Ruby, Basic taknyolás helyett --> Java (Pl.: Beanek)
5) Perzsizstencia réteg: SQL helyett --> Java (JPA)

Semmiben nem mont ellend ennek:

Hogy a javascriptet ne kelljen megtanulnia a java-programozoknak

En teljesen jol elvagyok a multitechnology stackkel, mert igy mindig azt hasznalom, amire epp szuksegem van, nem egy "mindenre illik de semmire se jo" nyelvet, mint pl a javat.

Epp en is Ext-es rendszert irok, de GWT nelkul, tisztabb, szarazabb, szebb, biztonsagosabb erzes, ajanlom neked is.

> Epp en is Ext-es rendszert irok, de GWT nelkul, tisztabb, szarazabb, szebb, biztonsagosabb erzes, ajanlom neked is.

Én továbbra is az erősen, statikusan típusos nyelvek híve vagyok. Nem magam miatt - egymagam JS-ezek is szívesen, de teamben jobb egy mavenes jellegű workflow.
A GWT-t fénysebességgel megtanultam használni, és az RPC-jénél tisztább-szárazabbat még sehol sem láttam. (Nem, Zendes kiegészítőknél sem, Rails-nél sem, sehol. Talán a NodeJS környékén felfedezhetnék ilyesmit, tekintve hogy ott a kliens ész szerveroldali nyelv ugyanaz, de még nem néztem utána.)

En nagyon orulok a tipuskoveto JIT compilernek, majd dobjon warningot ha valami nem tetszik. Biztos valaki orul annak hogy mar huszadjara wrappeli be az ojjektumot, en nem, CPU es olvashatosag-pazarlasnak tartom.

A stilusellenorzest, lintelest, ciklikussagmerest nem.

A maven workflow es a JS nem tudom, hogy es miert zarja ki egymast, konkretan az egyik appom maven workflowban van, szepen lehet deployolni, van manifestje, stb stb stb.

A GWT-RPC-re nem emlekszem mint sorositasi protokollra tul jol, arra emlekszem, hogy irdatlan nagy adatforgalmat generaltak a GWT-s appjaink, surun kuldtek sok adatot, de ez 1.4-es volt. Sajnos a marshallingot nem sikerult kihamozni a Google doksijaibol, hogy pontosan mi is megy.

Azt gondolom, hogy a weben egyetlen biztos dolog van jelenleg, ez pedig az, hogy van egy kliens es van egy szerver, ezek pedig request-response modon kell, hogy kommunikaljanak egymassal. Tudnak mashogy, ill. lehet mas kommunikaciot epiteni efole a protokoll fole, de akkor valami elveszik altalaban az elonyeibol [Fielding, 2001].

Nem akarok ebbe belemenni, de azt gondolom, hogy a GWT megprobalta elrejteni, hogy itt nem egy, hanem ket alkalmazas beszelget egymassal, es azt gondolom, hogy ez egy alapvetoen hibas dontes volt.

Ezt a dontest ugyanis nem indokolja a felhasznalo sajat problemaja: az o gepen egy alkalmazas fut, ami adatokat ker le egy rendszerrol. Ha ezt az alkalmazast elkezdjuk felig a masik rendszeren futtatni, akkor oriasi problemak lesznek, amiket persze elkezdunk majd kikerulgetni, es ennek hatasara lesz egy lassu alkalmazasunk, beszedes protokollal, minden letezo nyavalyaval.

Igy a GWT-t egy hibas, nem a felhasznalo problemajabol kiindulo megoldasnak tartom. Az, hogy valaki nem akar masban kodolni csak javaban, az nem a felhasznalo problemaja, megcsak nem is a technologiaje: ez egyes egyedul a fejleszto baja.

> a GWT megprobalta elrejteni, hogy itt nem egy, hanem ket alkalmazas beszelget egymassal
Nem ez történik, nyilvánvalóan nem is kétirányú a kommunikáció.

> Az, hogy valaki nem akar masban kodolni csak javaban
Ez a demagóg maszlag :) A lényeg, hogy valaki _EGY_ technológiát akar használni. ;)

A GWT marshallingja AFAIK nem annyira rossz hatásfokú. Amit meg mernék kockáztatni, hogy a híresen jó hatásfokú (és szintén Google-nál fejlesztett) protobufs-hoz van némi köze, de erősen citation needed.

A maven workflowt természetesen nem zárja ki az, hogy nem java (a szókiforgatásba megintcsak nem megyek bele), de magadon kívül mutass fel még egyvalakit a 0,000001% közül, aki normális deploying workflowt alkalmaz a php-s pythonos ruby-s kóklerkedés mellé...

Szerk.: Érdekes az értekezésünk, de már igencsak OFF-topik, lehet hogy nem itt kéne folytatni :)

A kommunikaciora meg visszaterunk, epp debuggolom ki hogy mit is csinalnak a maiak, meg hogy is volt ez... Valszeg csak siman dumas az RPC, de pl. a mostani mail appban azt se latom hol szol a szervernek, vagy hova rakja le az adatbazist.

Ez a demagóg maszlag :) A lényeg, hogy valaki _EGY_ technológiát akar használni. ;)
De miert? Miert akarunk mi egyetlen technologiat hasznalni? Kinek? Ki kert ra?

Eleve egyetlen _technologiat_ soha nem lehet hasznalni. Az SQL es a DocumentDB ("NoSQL") akkor is ket kulon technologia, ha van kulonbsegeket elrejto API-m.

Egyetlen nyelvet, azt lehet hasznalni, de jo esellyel teljesitmenyt es esetleg feature-t vesztek.

Ezt en legutobb JS-sel oldottam meg, couchdb + node.js + browser trioban, mert a cegnek ahol dolgoztam epp volt 200 JS programozoja akinek lemegseztek a projektjet, es ugy gondoltam, ha elut a villamos, akkor jobb ha nem pythonban van a szerveroldal.

De amugy van ket teljesen eltero kornyezetem, az egyik egy kliens, ami konzumer appok eseten keves dedikalt RAM-ot es CPU idot jelent, de az mehet erre az egy dologra, meg van egy (sok) szerver, ami teljesen erre a feladatra van dedikalva, viszont tobb peldany is fut ugyanabbol.

Browser eseten egyetlen kotott nyelv van, ezt ugy hivjak hogy javascript. Nem tudok sajnos azonosulni azzal a gondolkodasmoddal, ami minden erovel ennek a nyelvnek a megerteset elkerulni igyekszik, es helyette eroltet valamit, ami abszolut opcionalis.

A maven workflowt természetesen nem zárja ki az, hogy nem java (a szókiforgatásba megintcsak nem megyek bele), de magadon kívül mutass fel még egyvalakit a 0,000001% közül, aki normális deploying workflowt alkalmaz a php-s pythonos ruby-s kóklerkedés mellé

Akikrol tudok, igy kapasbol: Nokia, Facebook, Yahoo. A nokianak - talan ez nem baj ha kiderul - szo szerint maven workflowja van, a Facebooknak egy picit sajatabb a rendszere de a lenyegen nem valtoztat, a Yahoo -rol most hirtelen nem tudnam megmondani, valszeg van benne maven. A mostani cegnel sajna nincs build, de nem is maradok sokaig :) Jenkins viszont van.

Symfony-s (PHP) rendszereket altalaban illik buildelni, ruby-s rendszereket szinten, pythonos (django) rendszereket szinten.

Az nem feltetlenul baj, ha valami lefele is skalazodik, es nem kell hozza egy tobb giga memoriat zabalo IDE, hogy osszerakjak egy prototipust, vagy kiprobaljak egy otletet, de felfele meg muszaj skalazodni, nyilvan a legtobb nagyobbacska cegnel pre-hookok vannak az SVN-ben, vagy automatikusan buildel egy jenkins vagy codecruiser es kiabal ha baj van.

Szoval bocsanat, nem akarok szemelyeskedni, de 2012 van, letezik az a nyelv, ami a vilag osszes szamitogepere fel van telepitve es varhatoan tudod hasznalni, javascriptnek hivjak, ha nem tetszik az egyeni szoc. problem, viszont mindazok a dolgok, amik szuksegesek ahhoz, hogy alkalmazasokat ezen a nyelven nagyuzemi modon lehessen fejleszteni nyilvan megjelent, hisz ipari igeny van ra azoknal a vallalatoknal, akiknek erre szukseguk van, nevezetesen, akik nagyuzemben fejlesztenek webalkalmazasokat.

Az, hogy ezt kicsiben is lehet csinalni, a java meg nem skalazodik lefele jol, hat ezt talan ne nevezzuk elonynek, ha nincs mindenkinek igenye arra hogy maven-osgi comboval deployolja a Bela es Tsa Bt honlapjat, ez nem feltetlenul gond.

Ja, hogy kkv fejlesztoirodabol Magyarorszagon tobb van, mint enterspajzbol, ill. az otttani enterspajzok olyan programozokat vesznek fel akik nem akarnak hallani mas nyelvekrol, emiatt tisztan keptelenek kodolni JS-ben (hogy utalom, ne tudd meg: amikor a programozo megorul ha rosszul van indentalva a java-kodja, de JQuery-ben irja a spagettit, mikozben latod, hogy a requestek-commitok 85%-a frontend jellegu, de o nem hajlando megtanulni...), szoval ez azt gondolom, nem technologiai kerdes, ezen a javascript civilizalt oktatasaval es valamifele nyitottabb hozzaallassal lehetne segiteni...

De ugye Crockford apank mondta mindig, hogy a szoftver nem hardver, itt platformvaltas 20 evente van, mert egyszeruen kihalasos alapon tunnek csak el a berogzodesek, pl. hogy a java "a" multiplatform.

próbáld ki a unity3D plugint, igaz, egyelőre windows alatt fut csak, de egy ideje ígérgetik Chromeba a natív támogatást. És cserébe valódi 3D-s élményt ad.