» »

Programiranje 3D aplikacij- začetnik <-> nasveti

Programiranje 3D aplikacij- začetnik <-> nasveti

X-shift ::

Kot programer imam izkušnje le z spletnim programiranjem. Profesionalno s ukvarjam z popolnoma drugimi zadevami. Ob popoldnevih pa rad posedim za računalnikom in kakšno urco na dan kaj sprogramiram za kakšno internetno stran.

Sedaj pa bi rad začel z popolnoma drugačnim hobijem. Rad bi delal na aplikaciji ki teče na osebnem računalniku. In sicer neke vrste tehnični program. Najboljša primerjava bi bil AutoCAD. Čeprav bitveno bolj preprosta zadeva.

Sedaj me pa zanima kako se zadeve lotiti kot začetnik.

Kateri programski jezik naj izberem. Kje najdem najboljše vodiče za začetnike. In a je OpenGL v navezi z programskim jezikom ki se bo na koncu izbral optimalna zadeva.

C++ in OpenGL
Java in OpenGL
Python...

Te variante nekje sem z googlom spoznal da se kar dosti uporabljajo.

Ampak glede licenc mi je področje slabo poznano. Sam bi pa rad delal z programskim jezikom ki omogoča:

-prosto dostopno programsko okolje
-deluje na vseh platformah
-je primerno za tovrstno programiranje
-stabilno in enostavno za uporabo

Zavedam se seveda da kot začetnik imam večje možnosti da vse skupaj gre v pozabo kot da karkoli uspešno sprogramiram. Ampak vendarle že zaradi firbca me zanima kaj mi priporočate.
  • spremenil: X-shift ()

Ktj ::

Malce si poglej Qt od Nokie.

Isotropic ::

autocad je 2d okolje. omogoca sicer tudi 3d, samo tisto je bolj slabo (ceprav se v zadnjem casu izboljsuje). poglej se temo od marcela.
za 3d je pa prva stvar, ki jo rabis, 3d pogon (kot pri igricah, samo da ima drugacne feature). predlagam, da za zacetek naredis kaj v tej smeri. pa predlagam, da naredis vse skupaj z C#/ XNA oz. c#, directx. ce si cisti zacetnik pri programiranju (spletno nekako ne steje), predlagam, da se najprej spoznas malo s pythonom (cisto nepovezano z tem tvojim proggyem), da osvojis osnove (programiranja, objektnega p...)

Zgodovina sprememb…

morbo ::

Če hočeš da deluje na vseh platformah, potem stran od C#, XNA, directx. Loti se OpenGL-ja v C++ ali pa s kakim višjenivojskim wrapperjem - PyOpenGL, JOGL... Če se nočeš ukvarjat z linearno algebro (matrike, vektorji...) in bi rad da so 3D temelji že narejene zate, potem uporabi kak 3D pogon - recimo OGRE, za katerega tudi obstajajo višjenivojski wrapperji.

Za hobi bo IMO najboljša zadeva OpenGL + Python, oz. OGRE + Python-OGRE. Poguglaj.

X-shift ::

Kakšna pa je situacija z C++.

Naprimer prvi stavek ki ga najdeš na uradni strani Python programskega jezika se glasi:

Python runs on Windows, Linux/Unix, Mac OS X, and has been ported to the Java and .NET virtual machines.

Python is free to use, even for commercial products, because of its OSI-approved open source license.


Kako pa je z C++ in koliko skupnega ima z napisanim prvim stavkom z uradne spletne strani Python programskega jezika.

Zgodovina sprememb…

  • spremenil: X-shift ()

morbo ::

Programi napisani v C++ tudi delajo povsod :)

Vse kar rabiš je kompiler. Seveda boš moral svoj program kompilat za vsak sistem posebej, medtem ko program napisan v pythonu dela povsod brez posebnega prevajanja, a rabiš python virtual machine na ciljnem sistemu. C++ je težja zadeva za zaobvladat in znabit da bo projekt romal v koš, če ne bo motivacije. A če si odločen, potem je za 3D to najboljša izbira.

Če nisi delal še z nobeno od teh stvari, potem svetujem:

- najprej kolikor toliko zaobvladaj izbran jezik
- poglej si kak zastonjski 3D pogon: OGRE, irrlicht, Monkey Engine (ta je napisan v javi)
- (opcijsko) loti se študiranja OpenGL-ja

X-shift ::

Pa lahko vse kar potrebujem kot začetnik (in kasneje če ne bom omagal kot bolj izkušen programer) enako kot pri Python programskem jeziku dobim brezplačno?

Lahko C++ uporabim za odprtokodno ali plačljivo programsko opremo brez omejitev do kogarkoli?

Kako je z kompilerji za C++. Vsaka platforma torej potrebuje svoj kompiler. A je C++ koda za vse platforme (kompilerje) identična ali se razlikuje.

A so za C++ na voljo brezplačni kompilerji za vse platforme? Java in Python mi na prvi pogled tukaj delujeta mnogo bolj prožna in robustna in dostopna z praktično nič pogoji uporabe. A je z C++ enako?

morbo ::

Vse potrebno lahko dobiš zastonj. Tak prevajalnik je recimo GCC, ki mislim da obstaja za vse platforme. Na winsih se s temi stvarmi nisem ukvarjal, na Linuxu pa dobiš ogromno programerskih potrebščin že kot del osnovne instalacije.

C++ nima "pogojev uporabe". Kvečjemu jih ima prevajalnik. GCC je pod GPL. Kakšne so tukaj implikacije, glede licenc, bo pa razložil kdo drug ki se s tem bolj profesionalno ukvarja. (v bistvu to tudi mene zanima - a mora bit program preveden z GPL prevajalnikom, tudi pod GPL?). C++ koda je kar se tiče standardne knjižnice identična za vse platforme.

Prenosljivost med sistemi je s Pythonom ali Javo pač lažja za upravljat kot s C++. Čeprav pri ukvarjanju z grafiko boš tudi tukaj moral poleg svoje kode pošiljat naokoli specifične binarne datoteke za vsak sistem posebej, recimo wrapperje za OpenGL. Ampak to je minimalnost, v primerjavi z udobjem ki ti ga nudi interpretiran jezik.

Povzetek je nekako tak:

- Python: enostavnost, prenosljivost, hitrost izdelave programa
- C++: hitrost izvajanja programa (velik plus), več učnih resursov, večja podpora skupnosti / user base (govorim o 3D pogonih, ki so večinoma najprej napisani v C/C++, šele potem portani na druge jezike. To velja tudi za OpenGL)

Če ne misliš delat nekih grafično in procesorsko zelo zahtevnih aplikacij, potem ne razmišljaj in izberi Python.

Icematxyz ::

Kako pa je z OpenGL in linux in druge naprimer BSD distribucije? Je to podprto? Mislim si da je. Ampak nisem se nikoli poglabljal preveč v to.

Kaj se tiče licenc in tega seveda. Se pravi če spišeš aplikacijo ki uporablja OpenGL in teče na linux OS. Imaš do kogarkoli kakšne obveznosti če je aplikacija komercialna?

Zgodovina sprememb…

Mavrik ::

morbo: Majhen problemček je to, da Python nikakor ni dovolj hiter za neko normalno 3d izrisovanje z OGL, kar priznavajo še sami avtorji PyGL in priporočajo da (heh) uporabiš C knjižnice.
The truth is rarely pure and never simple.

arjan_t ::

Kako pa je z OpenGL in linux in druge naprimer BSD distribucije? Je to podprto? Mislim si da je. Ampak nisem se nikoli poglabljal preveč v to.

seveda dela


Kaj se tiče licenc in tega seveda. Se pravi če spišeš aplikacijo ki uporablja OpenGL in teče na linux OS. Imaš do kogarkoli kakšne obveznosti če je aplikacija komercialna?

odvisno od licence knjižice, openGL ni problem

morbo ::

Icematxyz: OpenGL je standard - vmesnik med tvojim programom in gonilniki grafične kartice. Mislim da ni grafične, ki ga nebi podpirala. Licenc tukaj ni.

Mavrik: Sej to pravim. Če avtor rabi le hobi potem je C++ overkill, ki mu bo le priskutil zadevo (glede na to da ima izkušnje le s programiranjem za internet), če pa misli da se bo iz tega izcimilo kaj bolj resnega, potem je C++ nuja. Jst sem se za hobi igračkal z Javo + OpenGL (JOGL) in nisem imel problemov s hitrostjo.

X-shift ::

Eno vprašanje še imam potem pa se bom odločil.

Zakaj na slovenski wikipediji piše:

Od 90. let je eden najbolj priljubljenih komercialnih programskih jezikov.


Če je nekaj komercialno pomeni da moraš plačati? Ali sem jaz narobe se učil pri urah ekonomije?

Prosto dostopno ni enako komercialno? In zakaj je določen del odprto kodne skupnosti ki skrbi za razvoj prosto dostopnega programja malo skeptičen do uporabe C++ v te namene?

Isotropic ::

ker se uporablja v komercialne namene, bi rekel. je pa tale wiki malo sfaljeno prevajana pomoje. no, naceloma je treba placati za VS, recimo.

btw, ce sem prav razumel, ti ne znas bolj ali manj nic programirati. ce je temu tako, pozabi na cpp in pojdi z java/opengl, c#/xna. ze tam bos imel steep learning curve kot zacetnik, kaj sele v cpp
ce bos zacel s tema dvema, poglej marcelovo temo o C# "autocadu" in najprej zacni to (se prej pa pac osnove).

tko, moras se nauciti hoditi, preden hoces leteti, imo.

morbo ::

Tisto bo kak čuden prevod. C++ kot programski jezik, ni komercialen. Komercialni so nekateri (oz. večina) prevajalniki zanj.

Kolikor sem razumel lahko z GCC prevajalnikom (ki je zastonjski) delaš komercialne projekte (to itak) in tudi closed source projekte, če le ne uporabljaš kakih njegovih knjižnic (ne boš). Tako da ti ni prav nič potrebno plačat, le downloadaj stvari in začni delat.

X-shift ::

Recimo da razmišljam tako. Ok C++ je najtežja opcija. Ampak realno gledano edina pravilna izbira za takšne aplikacije. Prevajalniki so prosto dostopni. S kodo lahko počnem kar me je volja. Rabim torej le znanje.

Torej če že bom posvečal svoj prosti čas nečemur kaj me veseli in ne bom omagal a je to dobra izbira za prvi vodič:

Accelerated C++
Practical Programming by Example
by Andrew Koenig and Barbara E. Moo

Amazon

morbo ::

Verjetno ne, glede na to da ima v naslovu besedo "accelerated". Jst bi izbral tole, pa še zastonj je.

X-shift ::

Hvala morbo za tvoj trud in razlago osnov začetniku. Hvala tudi ostalim za kakšno pripombo.

Mislim da je jasno iz te teme česa in na kakšen način se moram naučiti da bom sposoben izdelati željeno aplikacijo. Tudi zadeve okrog C++ sem si razlagal napačno. Dokler v tej temi nisem dobil jasnih odgovorov. Vsekakor se ne slepim in vem da je večja vrjetnost da z vsega skupaj ne bo nič kot da uspem. Bom pa poskusil in posvetil temu nekaj prostega časa.

Morda bom še podal kanček dobro namerne kritike. Kot popoln začetnik sem na portalu kjer bi pričakoval da se nahaja programerska smetana slovenskega prostora pričakoval morda kanček več nasvetov in jasnih usmeritev. Kot pa le trud posameznika in dve ali tri pripombe.

Vsekakor pa bom se še obrnil za pomoč na ta portal v kolikor bom jo potreboval. Nenazadnje pa čeprav ob trudu posameznika sem dobil željene odgovore! Sedaj pa me čaka kurjenje miselnih ciklov!

morbo ::

V bistvu si premalo opisal kaj naj bi bila željena aplikacija. Če naj bi šlo za grafično zahtevno zadevo (veliko geometrije naenkrat na zaslonu, veliko tekstur, shaderji, sence) potem je edina opcija C++. Če pa bi rad prikazoval / obdeloval / al karkoli že, kakšne tehnične (žične) modele, brez teksturiranja in naprednih senčilnikov, potem so vse možnosti odprte.

V vsakem primeru bi jst na tvojem mestu posegel po kakem zastonjskem 3D pogonu in (zaenkrat) pozabil na OpenGL. OpenGL je le osnovni temelj za komunikacijo z grafično in ne vsebuje nobene višjenivojske abstrakcije (recimo kamero, hierarhično-prostorsko razporejanje...), zato bo prevelik zalogaj. Grafični pogoni pa imajo temelje zgrajene (matematična knjižnica, scene graph, uvoz modelov, podpora miši/tipkovnice, picking, sence...) in tebi ni potrebno izumljat tople vode, ter se lahko posvetiš izdelavi dejanskega programa. Kot sem že omenil, ti od 3D pogonov svetujem OGRE.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

kateri jezik za programiranje grafike priporočate itd.

Oddelek: Programiranje
91342 (1162) w00tnes
»

Filipinske šole bogatejše za 23.000 PC-jev z Linuxom (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
619346 (7330) MrStein
»

Kje začeti z programiranjem? (strani: 1 2 )

Oddelek: Programiranje
947566 (5170) BigWhale
»

Delphi VS Visual C++

Oddelek: Programiranje
212167 (1845) webblod
»

3D Engine

Oddelek: Programiranje
291744 (1344) helidium

Več podobnih tem