Ohjelmointi

3D-grafiikan ohjelmointi Java-ohjelmassa, osa 3: OpenGL

On kulunut jonkin aikaa viimeisestä erästä tässä sarjassa Java-grafiikan ohjelmoinnista (lisää tämän sarakkeen lopussa). Tässä on nopea päivitys siitä, mistä keskustelimme viimeksi ja mihin jäimme.

Edellisessä kahdessa sarakkeessa (katso Resurssit) tutkimme Java 3D: tä. Keskustelimme staattisesta sisällöstä ja pienistä kohtauksista, käytimme sitten suurempia kohtauskaavioita ja rakensimme vuorovaikutteisuuden joihinkin 3D-peruskehyksiin.

Nyt kun tiedät vähän Java 3D: n käytöstä, on aika verrata ja verrata Java 3D -näkökulmaa 3D-grafiikkaan johtavan grafiikkasovellusliittymän kilpailijan: OpenGL: n kanssa.

Huomaa, että tämä artikkeli oli alun perin tarkoitettu koodia vaativaksi, mutta Arcane Technologiesin myöhässä tekemä päätös taikurin sitomisesta (katso alla) edellytti koodiesimerkkien poistamista. Toivon, että tämän artikkelin sisältö voidaan mukauttaa tulevaa Java-OpenGL-sidontaa varten, jota ei vielä ole saatavana OpenGL-konsortiolta.

Joka tapauksessa olen pyrkinyt toimittamaan kaikki asiaankuuluvat ja hyödylliset OpenGL: ään liittyvät viitteet ja URL-osoitteet tämän sarakkeen lopussa oleviin resursseihin. Jos haluat syventää Java-OpenGL: ää, suosittelen ehdottomasti, että luet nämä viitteet.

Java-OpenGL-vertailu Java 3D: hen

Aikaisemmissa Java 3D -erissä olen toimittanut luettelon Java 3D: n grafiikkasovellusten käytön vahvuuksista ja heikkouksista. Nosta tämä luettelo uudelleen, mutta tee se tarkastelemalla Java-OpenGL-pohjaisten ratkaisujen vahvuuksia ja heikkouksia Java 3D-pohjaisten ratkaisujen sijaan.

OpenGL: n (ja laajennuksena ja Java-OpenGL-sidosten) käytön vahvuudet:

  • OpenGL tarjoaa grafiikan menettelytavan

    Tämä vastaa läheisesti monia algoritmeja ja menetelmiä, joita graafiset ohjelmoijat ovat käyttäneet historiallisesti. Menettelymalli on heti intuitiivinen ja suoraviivainen monille 3D-grafiikan harrastajille.

  • OpenGL tarjoaa suoran pääsyn renderöintiputkelle

    Tämä pätee mihin tahansa eri kielisidonnasta, mukaan lukien useimmat Java-sidokset. OpenGL antaa ohjelmoijille mahdollisuuden määrittää suoraan grafiikan renderointitapa. Yksi ei vain vihje ja pyyntö kuten Java 3D, yksi määrää.

  • OpenGL on optimoitu kaikilla kuviteltavissa olevilla tavoilla

    OpenGL on optimoitu laitteistoihin ja ohjelmistoihin ja kohdennettuihin alustoihin aina halvimmista tietokoneista ja pelikonsoleista huippuluokan grafiikan supertietokoneisiin.

  • Kaikenlaisten 3D-grafiikkaan liittyvien laitteiden toimittajat tukevat OpenGL: ää

    OpenGL on

    standardi, johon laitteistotoimittajat mittaavat grafiikkatekniikkaansa, ei mitään. Kun Microsoft on liittynyt SGI: hen Fahrenheit-aloitteessa, monille on tullut yhä selvemmäksi, että tämä on itse asiassa Microsoftin epäsuora tunnustus siitä, että OpenGL voitti API-sodat 2D- ja 3D-grafiikoille.

Toisaalta mikään ei ole täydellistä. OpenGL: llä ja varmasti Java-OpenGL-sidoksilla on joitain merkittäviä puutteita:

  • Graafisen ohjelmoinnin menettelytavan vahvuudet ovat samanaikaisesti heikkous monille Java-ohjelmoijille

    Suhteellisen uusille ohjelmoijille, joista monet ovat saattaneet saada ensimmäisen muodollisen ohjelmointiohjeensa Java-sovelluksessa käyttämällä objektorientoituja menetelmiä, OpenGL: n menettelytapa ei ole kovin hyvin objektorientoidun lähestymistavan ja hyvän tekniikan käytännön mukainen.

  • Monien toimittajien OpenGL-optimointien on tarkoitus vähentää laitteistovalintaa

    Jokaisen toimittajan etujen mukaista on rakentaa omia laajennuksia ja tehdä omia optimointeja myydä enemmän omia laitteitaan. Kuten kaikkien laitteisto-optimointien kohdalla, sinun on käytettävä kiihdyttimekohtaisia ​​OpenGL-optimointeja ja ymmärrettävä, että kukin yhden alustan optimointi heikentää useiden muiden siirrettävyyttä ja suorituskykyä. Java 3D: n yleiskäyttöisemmillä optimoinnilla pyritään enimmäkseen maksimoimaan Java 3D -sovellusten siirrettävyys.

  • Vaikka C-liitännät OpenGL: ään ovat läsnä kaikkialla, Java-rajapintoja ei ole vielä standardoitu eikä niitä ole laajalti saatavilla

    Arcane Technologiesin Magician-tuote oli vasta viime aikoina ollut markkinoilla muuttamaan tätä siirrettävyyskysymystä, mutta sen häviäminen kattaa ainakin Java-OpenGL: n monialaisen tarinan ainakin tällä hetkellä. Lisää tästä alla.

  • OpenGL: n altistuminen renderöinnin sisäisille yksityiskohdille voi merkittävästi vaikeuttaa muuten yksinkertaisia ​​3D-grafiikkaohjelmia

    Teho ja joustavuus ovat monimutkaisuuden hinta. Nykypäivän teknologiamaailman nopeissa kehitysvaiheissa monimutkaisuus on itsessään jotain, jota on vältettävä mahdollisuuksien mukaan. Vanha sanonta virheistä on totta: mitä enemmän koodiriviä, sitä enemmän vikoja (yleensä).

Kuten OpenGL-pohjaisten lähestymistapojen eduista ja haitoista voi nähdä, Java-OpenGL on vahva monilla alueilla, joilla Java 3D on heikko. OpenGL antaa ohjelmoijille matalan tason pääsyn renderöintiprosessiin, jota Java 3D nimenomaisesti välttää, ja OpenGL on tällä hetkellä saatavilla paljon useammalla alustalla kuin Java 3D (taikuri syrjään). Mutta tähän joustavuuteen liittyy potentiaalinen hinta: ohjelmoijilla on paljon tilaa optimoinnille, mikä päinvastoin tarkoittaa, että heillä on paljon tilaa tehdä asioita. Java 3D: ssä on enemmän sisäänrakennettua optimointia ja helpompi ohjelmointimalli, joka voi osoittautua erityisen hyödylliseksi ohjelmoijille, jotka ovat aloittaneet uuden Java-, 3D-grafiikkatyön tai verkotetun ja hajautetun grafiikan ohjelmoinnin.

$config[zx-auto] not found$config[zx-overlay] not found