cb3d - 3D Coolbasicilla
-
- Member
- Posts: 52
- Joined: Sat May 12, 2012 7:11 pm
- Location: C:/WINDOWS/system32
cb3d - 3D Coolbasicilla
Ennen cbE:tä olen kauan miettinyt tälläista, mutta homman on laittanut paskaksi cb:n tehon puute, mutta cbE muutti kaiken. Avasin editorin ja aloin kehitellä piirtokomentoihin ja matematiikkaan keskittyvää 3D-moottoria Koodaajahan jo teki tällaisen, mutta silloinpa ei ollut käytössä nykyajan huippuaseita, kuten cbE 3D-moottori siis mahdollistaa melko alkeelliset 3D-pelit. Tähän asti suunnittelemani 3D-moottorilla ei saada edes perus FPS-peliä(Liiku ja tapa), mutta, jos tämä edistyy, niin voin/voimme ainaki YRITTÄÄ tehdä sellaisen 3D-moottorin joka mahdollistaa moisen. Tällä saa ihan hyvin, vaikka autopelin tehtyä, jos tämä valmistuu.
Tarkoitus oli laitta screenshottia, mutta muutaman ratkaisevan virheen(Funktiot leikattu, sitten katosivat, kun vahingossa copypastesin muutamia koordinaatteja..) Auttavia käsiä olisi mukava saada,tarvitaan matematiikan taitajaa(geometrian, edes sen perusasiat olisi mukava hallita) ja koodinaputtelijoitakin saa tulla auttamaan. Viestitys tavat ovat mese,IRC,YV(ei mielellään, koska voi tulla isokin lössi) ja Skype.
Jos saamme 3D-moottorin valmiiksi tai edes jonkinlaiseen toiminta kuntoon, voisimme tehdä jonkinlaisen pelin.
Niin ja kiitos TOSI PALJON Nille, jotka mahdollistivat tämän projektin aloituksen, eli cbE:n kanssa verta itkien painineet urheat koodisoturimme
Tarkoitus oli laitta screenshottia, mutta muutaman ratkaisevan virheen(Funktiot leikattu, sitten katosivat, kun vahingossa copypastesin muutamia koordinaatteja..) Auttavia käsiä olisi mukava saada,tarvitaan matematiikan taitajaa(geometrian, edes sen perusasiat olisi mukava hallita) ja koodinaputtelijoitakin saa tulla auttamaan. Viestitys tavat ovat mese,IRC,YV(ei mielellään, koska voi tulla isokin lössi) ja Skype.
Jos saamme 3D-moottorin valmiiksi tai edes jonkinlaiseen toiminta kuntoon, voisimme tehdä jonkinlaisen pelin.
Niin ja kiitos TOSI PALJON Nille, jotka mahdollistivat tämän projektin aloituksen, eli cbE:n kanssa verta itkien painineet urheat koodisoturimme
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Re: cb3d - 3D Coolbasicilla
cbSDK toteuttaa jo ihan mukavasti 3D-funktiot. (Tai cbFun?)
En tosin tiedä missä sitä nykyään hostataan, jos missään.
En tosin tiedä missä sitä nykyään hostataan, jos missään.
Re: cb3d - 3D Coolbasicilla
Kyllä. cbSDK juurikin tukee .obj tiedostoja.esa94 wrote:cbSDK toteuttaa jo ihan mukavasti 3D-funktiot. (Tai cbFun?)
En tosin tiedä missä sitä nykyään hostataan, jos missään.
K-Peleistä löytyypi cbSDK. http://www.kpelit.fi/?c=1633 ja jos haluaa niille syntaksivärjäyksen ja että komennon selitys avautuu klikkaamalla: viewtopic.php?p=47903#p47903
Last edited by Viltzu on Sat Jun 16, 2012 10:37 pm, edited 1 time in total.
Re: cb3d - 3D Coolbasicilla
Ihan vain sivuhuomautuksena, FPS on helpoin kolmiulotteisista genreistä (kameran ja hahmon ohjaamisen suhteen). Autopelit lienevät sieltä hankalemmasta päästä (sitten kun kameran saa jotenkuten toimimaan, auton fysiikat kolmessa ulottuvuudessa menee tod. näk. kyli hilseen ainakin itselläni).Untitled.bmp wrote:Tähän asti suunnittelemani 3D-moottorilla ei saada edes perus FPS-peliä(Liiku ja tapa), mutta, jos tämä edistyy, niin voin/voimme ainaki YRITTÄÄ tehdä sellaisen 3D-moottorin joka mahdollistaa moisen. Tällä saa ihan hyvin, vaikka autopelin tehtyä, jos tämä valmistuu.
Tässä joskus aikoinani tekemäni pieni 3D-moottori, muistaakseni toimi ihan hyvin. Maailmaan pystyy lisäämään pisteitä ja viivoja, ja ne piirretään keskitetysti:
Code: Select all
Global CamX#, CamY#, CamZ#, CamA#, CamP#, CamR#
Global ZPROJ#
ZPROJ = 270.0
Global ScreenWd2, ScreenHd2
ScreenWd2 = ScreenWidth() / 2 : ScreenHd2 = ScreenHeight() / 2
Type Line3D
Field X1#
Field Y1#
Field Z1#
Field X2#
Field Y2#
Field Z2#
Field ColR
Field ColG
Field ColB
EndType
Type Dot3D
Field X#
Field Y#
Field Z#
Field Pixel
EndType
Function AddDot(X#, Y#, Z#)
nD.Dot3D = New(Dot3D)
nD\X = X : nD\Y = Y : nD\Z = Z
nD\Pixel = getRGB(BLUE) + (getRGB(GREEN) Shl 8) + (getRGB(RED) Shl 16) - 16777216
Return ConvertToInteger(nD)
EndFunction
Function AddLine(X1#, Y1#, Z1#, X2#, Y2#, Z2#)
nL.Line3D = New(Line3D)
nL\X1 = X1 : nL\Y1 = Y1 : nL\Z1 = Z1
nL\X2 = X2 : nL\Y2 = Y2 : nL\Z2 = Z2
nL\ColR = getRGB(RED) : nL\ColG = getRGB(GREEN) : nL\ColB = getRGB(BLUE)
Return ConvertToInteger(nL)
EndFunction
Function Draw3D()
'Lock
For iL.Line3D = Each Line3D
a# = GetAngle(0, 0, iL\X1 - CamX, iL\Z1 - CamZ)
d# = Distance(0, 0, iL\X1 - CamX, iL\Z1 - CamZ)
X1# = Cos(a# - CamA) * d#
Z1# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, iL\X2 - CamX, iL\Z2 - CamZ)
d# = Distance(0, 0, iL\X2 - CamX, iL\Z2 - CamZ)
X2# = Cos(a# - CamA) * d#
Z2# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, Z1#, iL\Y1 - CamY)
d# = Distance(0, 0, Z1#, iL\Y1 - CamY)
Z1# = Cos(a# - CamP) * d#
Y1# =-Sin(a# - CamP) * d#
a# = GetAngle(0, 0, Z2#, iL\Y2 - CamY)
d# = Distance(0, 0, Z2#, iL\Y2 - CamY)
Z2# = Cos(a# - CamP) * d#
Y2# =-Sin(a# - CamP) * d#
a# =-GetAngle(0, 0, X1#, Y1#)
d# = Distance(0, 0, X1#, Y1#)
X1# = Cos(a# - CamR) * d#
Y1# = Sin(a# - CamR) * d#
a# =-GetAngle(0, 0, X2#, Y2#)
d# = Distance(0, 0, X2#, Y2#)
X2# = Cos(a# - CamR) * d#
Y2# = Sin(a# - CamR) * d#
If Z1# > 0 Or Z2# > 0 Then
Z1# = Max(1, Z1#) / ZPROJ
X1# = (X1# / Z1#) + ScreenWd2
Y1# =-(Y1# / Z1#) + ScreenHd2
Z2# = Max(1, Z2#) / ZPROJ
X2# = (X2# / Z2#) + ScreenWd2
Y2# =-(Y2# / Z2#) + ScreenHd2
Color iL\ColR, iL\ColG, iL\ColB
Line X1#, Y1#, X2#, Y2#
EndIf
Next iL
For iD.Dot3D = Each Dot3D
a# = GetAngle(0, 0, iD\X - CamX, iD\Z - CamZ)
d# = Distance(0, 0, iD\X - CamX, iD\Z - CamZ)
X1# = Cos(a# - CamA) * d#
Z1# =-Sin(a# - CamA) * d#
a# = GetAngle(0, 0, Z1#, iD\Y - CamY)
d# = Distance(0, 0, Z1#, iD\Y - CamY)
Z1# = Cos(a# - CamP) * d#
Y1# =-Sin(a# - CamP) * d#
a# =-GetAngle(0, 0, X1#, Y1#)
d# = Distance(0, 0, X1#, Y1#)
X1# = Cos(a# - CamR) * d#
Y1# = Sin(a# - CamR) * d#
If Z1# > 0 Then
Z1# = Max(1, Z1#) / ZPROJ
X1# = Int( (X1# / Z1#) + ScreenWd2)
Y1# = Int(-(Y1# / Z1#) + ScreenHd2)
If X1# > 0 And Y1# > 0 And X1# < ScreenWd2*2 - 1 And Y1# < ScreenHd2*2 Then PutPixel2 X1#, Y1#, iD\Pixel
EndIf
Next iD
'Unlock
EndFunction
Function MoveCamera3D(cX#, cY#, cZ#)
CamX = CamX + Cos(CamA) * cX - Cos(CamP) * Sin(CamA) * cZ + Sin(CamP) * Sin(CamA) * cY
CamY = CamY + Sin(CamP) * cZ + Cos(CamP) * cY
CamZ = CamZ - Sin(CamA) * cX - Cos(CamP) * Cos(CamA) * cZ + Sin(CamP) * Cos(CamA) * cY
End Function
En ota vastuuta mahdollisesti täysin väärästä tavasta laskea näitä hommia, koko moottori on rakennettu lukematta mitään aiheesta.
-
- Member
- Posts: 52
- Joined: Sat May 12, 2012 7:11 pm
- Location: C:/WINDOWS/system32
Re: cb3d - 3D Coolbasicilla
On olemassa monen laisia 3D-autopelejä, esimerkiksi sellaisia, joissa auto liikkuu suoraan eteenpain ja kaantyy aina välillä ja, jos se törmää johonkin, se vain pysähtyy ja peruuttaa takaisin. Itselläni on todella vanhassa Nokian puhelimessa(Väritön näyttö, ei nettimahdollisuuksia) kyseenlainen autopeli. Ei tuo sinun 3D-moottori näyttänyt toimivan? Tai sitten vain en osannut käyttää sitä Näyttivät muuten pirun hienoilta nuo SDK:n 3D-funktiot Mietin, että pitäisikö yrittää luoda systeemi, joka kääntäisi 2D-kartan 3D ulottuvuudeksi. Mokoman toteutus voi kyllä mennä mahdottoman vaikeaksi, jos vain pysyisin siinä, että 3D-maailma rakennetaan kuvioista(tetraedrit,kuutiot jne). Luulisin, että tämän projektin vaikeimmaksi asiaksi tulee saada kamera toimimaan, jos halutaan kunnon kuutioita sinne maailmaan. Tarvitaan ainakin todellista matematiikan taitajaa.Ihan vain sivuhuomautuksena, FPS on helpoin kolmiulotteisista genreistä (kameran ja hahmon ohjaamisen suhteen). Autopelit lienevät sieltä hankalemmasta päästä (sitten kun kameran saa jotenkuten toimimaan, auton fysiikat kolmessa ulottuvuudessa menee tod. näk. kyli hilseen ainakin itselläni).
Nyt pieni kysely, olisiko ketään kiinnostunutta tähän projektiin? Kuten aloitusviestissä sanoin, että tarvitsen koodareita ja mahdollista matematiikan jauhajaa. Ongelmia aiheuttaa myös cbE, sillä minulla ainakaan ei toimi ohjelmat, joissa käytetään enemmän, kuin yhtä piirtokomentoihin perustuvaa funktiota Ei ole kovin varmaan, riittävätkö normin cbE:n tehot pyörittämään tätä systeemiä. Ja sitten minua huolettaa se, että, jos tämä ei valmistu ennen Cbc:n ilmestymistä, niin tämän teko meni kyllä melko turhaksi, mutta mitäs siinä? Tehdään mielenkiinnon vuoksi, ei muiden hyödyksi >:D
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Re: cb3d - 3D Coolbasicilla
Itse asiassa cbSDK:ssa on myös yhdenlainen "3d-kartta" systeemi jossa taloissa on syvyys vaikutelmaa. Suosittelen hieman tutkimaan sitä.
Tietääkseni kuitenkaan CBC:hen ei tule 3d ominaisuuksia joten tuskimpa tämän tekeminen siltä kannalta turhaa on, mutta jos jossain vaiheessa saisin cbE:n C++ APIn tietyä niin kannattaisi tehdä mielummin OpenGL kirjasto CB:lle kuin tälläistä viritelmää, koska kuitenkaan tällä ei päästä kovin huikeisiin piirtonopeuksiin.
Mutta tietysti mikäs siinä jos kiinnostaa. Saahan sitä tehdä ja on tuo oikein mielenkiintoinen juttu, mutta hyödyllisyydellä projektia ei ehkä voi perustella.
Tietääkseni kuitenkaan CBC:hen ei tule 3d ominaisuuksia joten tuskimpa tämän tekeminen siltä kannalta turhaa on, mutta jos jossain vaiheessa saisin cbE:n C++ APIn tietyä niin kannattaisi tehdä mielummin OpenGL kirjasto CB:lle kuin tälläistä viritelmää, koska kuitenkaan tällä ei päästä kovin huikeisiin piirtonopeuksiin.
Mutta tietysti mikäs siinä jos kiinnostaa. Saahan sitä tehdä ja on tuo oikein mielenkiintoinen juttu, mutta hyödyllisyydellä projektia ei ehkä voi perustella.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: cb3d - 3D Coolbasicilla
Kameran luonti ei ole erityisen vaikeaa, pitää vain tehdä yksi funktio joka palauttaa matriisin kameran sijainnin, kameran suunnan ja ylös-suunnan perusteella. Tähän menee parisenkymmentä riviä, riippuen miten tiukasti sen haluaa toteuttaa. En usko että FPS-moottorikaan olisi erityisen mahdoton, se vain ei näyttäisi kovin hyvältä ja vaatisi hirvittävästi säätöä. Ylipäänsä säädön määrä on se syy, miksi CB:llä on niin vähän 3D-pelejä - itse asiat eivät ole vaikeita, mutta niiden optimointi ja perusteista lähtien koodailu vievät hirvittävästi aikaa.
EDIT: Tuo oma 3D-kirjoittelunihan huipentui lentelytestiin, josta ei mitään valmista koskaan tullut, mutta ihan kivan näköinen se on. Senkin alla on alkeellinen 3D-engine, josta pitäisi joskus kirjoitella parempi versio. Esimerkiksi yhden kolmion piirtävä funktio on huono ajatus, kannattaa mieluummin tehdä globaali taulukko tai type joka täytetään ja kutsutaan sitten yhtä koko listan rendaavaa funktiota, tulee ylimääräisista funktiokutsuista johtuvaa hidastelua paljon vähemmän.
EDIT: Tuo oma 3D-kirjoittelunihan huipentui lentelytestiin, josta ei mitään valmista koskaan tullut, mutta ihan kivan näköinen se on. Senkin alla on alkeellinen 3D-engine, josta pitäisi joskus kirjoitella parempi versio. Esimerkiksi yhden kolmion piirtävä funktio on huono ajatus, kannattaa mieluummin tehdä globaali taulukko tai type joka täytetään ja kutsutaan sitten yhtä koko listan rendaavaa funktiota, tulee ylimääräisista funktiokutsuista johtuvaa hidastelua paljon vähemmän.
-
- Member
- Posts: 52
- Joined: Sat May 12, 2012 7:11 pm
- Location: C:/WINDOWS/system32
Re: cb3d - 3D Coolbasicilla
*Clapclapclap* Todella onnistunut engine Mikset ole tuota julkaissut? Tuollahan saisi juuri sen kuvailemani autopelin tehtyä. Ja sait tuon vielä toimimaan ilman paljoakaan pätkimistä. Hienoa! Hatunosto ja 10 pistettä sinulle tuosta, koodaaja. Mutta pientä tilannepäivitystä:Tuo oma 3D-kirjoittelunihan huipentui lentelytestiin, josta ei mitään valmista koskaan tullut, mutta ihan kivan näköinen se on. Senkin alla on alkeellinen 3D-engine, josta pitäisi joskus kirjoitella parempi versio. Esimerkiksi yhden kolmion piirtävä funktio on huono ajatus, kannattaa mieluummin tehdä globaali taulukko tai type joka täytetään ja kutsutaan sitten yhtä koko listan rendaavaa funktiota, tulee ylimääräisista funktiokutsuista johtuvaa hidastelua paljon vähemmän.
Edelleen tarvitsisin edelleen porukka mukaan, keksin myös miten voisin jonkin moisen 3D-previewrin tehdä, kyseessä olisi sellainen ohjelma, jolla voi katsella kolmiulotteista laattaa mistä tahansa kulmasta. Ongelmaksi tuli osaamattomuuteni: Huomasin osaavani paljon enemmän geometriaa kuin trigonometriaa. Oli tarkoitus nimittäin aluksi piirtää normaali, 2D-neliö viivoilla, neliötä voisi pyöritellä nuolinäppäimillä, 2D-pyörittely hoituisi trigonometrialla ja 3D-pyörittelylle ei tarvita muuta kuin nurkkien liikuttelua. Tämäkin sitten pitäisi saada toimimaan trigonometrian kanssa ilman mitään outouksia Edelleen tarvitsisin osaajia, joilla sujuu geometria JA trigonometria. Pitäisiköhän tällekin apurinhaulle tehdä oma aihe tiimin haku ja rakennus-aiheeseen-- Noilla laatoilla voisi myös rakentaa kaikki geometriset kappaleet, joiden tahkot olisivat neliöitä.
Intel core i7 3960X 3,9ghz 15mb
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
Sapphire Radeon HD7970
160gb ssd
2tb hdd
8gb Ram
Windows 7 Ultimate 64-bit & Linux Ubuntu 12.04LTS
- Sami The Great
- Advanced Member
- Posts: 485
- Joined: Tue Aug 28, 2007 4:15 pm
- Contact:
Re: cb3d - 3D Coolbasicilla
Tämä tosiaan olisi ehkä jopa helpompi toteuttaa vaikka OpenGL:llä suoraan tekemällä dll. Siinä kun on jo valmiiksi piirtofunktiot esim. kolmiolle, jossa annetaan vain x,y,z koordinaatistossa pisteet ja loput hoituukin sitten kuin itsestään. Olisikin hienoa, jos CbE:hen saisi funktion, joka antaa ikkunan kahvan, jotta pystyisi helpommin lisäämään siihen erilaisia grafiikkaa hoitavia dll tiedstoja. Yksi idea olisi myös tehdä OGRE 3D:lle wrapperi, joka olisi oma dll, ja se pyörittäisi OGREa. Renderöinnin tulos voitaisiin jotenkin kasata Allegron layerille tai vastaavalle.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
CoolBasickin käyttäjä vuodesta 2004.
Re: cb3d - 3D Coolbasicilla
Juu. Jonkinlainen cbE API C++:lle pitäisi tehdä, mutta minua mietityttää vain mitenkä linkkaus pitäisi hoitaa että DLL pääsisi käsiksi esimerkiksi cbE:n objekteihin ja stackin poppaukseen yms.Sami The Great wrote:Tämä tosiaan olisi ehkä jopa helpompi toteuttaa vaikka OpenGL:llä suoraan tekemällä dll. Siinä kun on jo valmiiksi piirtofunktiot esim. kolmiolle, jossa annetaan vain x,y,z koordinaatistossa pisteet ja loput hoituukin sitten kuin itsestään. Olisikin hienoa, jos CbE:hen saisi funktion, joka antaa ikkunan kahvan, jotta pystyisi helpommin lisäämään siihen erilaisia grafiikkaa hoitavia dll tiedstoja. Yksi idea olisi myös tehdä OGRE 3D:lle wrapperi, joka olisi oma dll, ja se pyörittäisi OGREa. Renderöinnin tulos voitaisiin jotenkin kasata Allegron layerille tai vastaavalle.
cbE tekee jo valmiiksikin allegron toimesta piirron OpenGL:llä joten OpenGL APIn tekeminen CB:lle ei olisi vaikeata jos saan tehtyä cbE:n tukemaan tuollaisia headerillisia custom funktioita DLL:lle ja annettua DLL:lle pääsyn cbE:n funktioihin.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: cb3d - 3D Coolbasicilla
Itse olen aina ja jatkuvasti sitä mieltä että jos lähtee DLL:illä kikkailemaan niin voisi samantien siirtyä johonkin vähän tehokkaammin dataa murskaavaan kieleen. Yleisölle julkaisematon kgl-kirjastoni sisältää/sisälsi valmiin systeemin kolmioiden sorttaukseen ja piirtoon, matriisien sekä yhden suuntavalonlähteen käyttöön, eikä siinä hirvittävän paljoa koodia ollut. Armottoman hidas se tosin on.
Ja Untitled.bmp, kannattaa selailla efektitopikkia, sieltä löytyy monia hienoja koodinpätkiä ja onpa siellä muistaakseni linkki tuohonkin lentelytestiin. Suuria harppauksia polygonigrafiikassa aloin itse tehdä siinä vaiheessa kun eräs kaveri huomautti lukitun viivan olevan syystä tai toisesta huomattavasti lukitsematonta nopeampi, tätä kannattaa käyttää hyväkseen jos 3D:tä meinaa rendailla.
Ja Untitled.bmp, kannattaa selailla efektitopikkia, sieltä löytyy monia hienoja koodinpätkiä ja onpa siellä muistaakseni linkki tuohonkin lentelytestiin. Suuria harppauksia polygonigrafiikassa aloin itse tehdä siinä vaiheessa kun eräs kaveri huomautti lukitun viivan olevan syystä tai toisesta huomattavasti lukitsematonta nopeampi, tätä kannattaa käyttää hyväkseen jos 3D:tä meinaa rendailla.