---
- seancarrion
- Active Member
- Posts: 128
- Joined: Sun Jan 01, 2012 11:37 am
- Location: ---
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: 3D CoolBasicilla?
3D ei vaadi mitään erityisiä komentoja, esimerkiksi kyseinen naama on piirretty vanhalla tutulla box-komennolla. Renderöintihän on loppujen lopuksi samaa hommaa, ennen varsinaista piirtokomentoa täytyy vain suorittaa jonkun verran projisointiin, piirtojärjestykseen, valaistukseen ja sen semmoiseen liittyviä laskutoimituksia.
Käytännössä kannattaa tallentaa taulukko kolmioista tai verteksitauluun osoittava taulukko kolmioiden kulmien indekseistä, järjestää se kolmion keskimääräisen z-arvon perusteella ja piirtää kolmiot takaa eteenpäin lukituilla viivoilla - Line on vähintään tsiljoona kertaa nopeampi lukittuun pintaan. Lisäksi hommaan voi ympätä kolmioiden normaaleihin perustuvan zcullin eli tarkistuksen siihen, onko kolmio kameraan päin vai siitä poispäin ja poistaa ne, jotka eivät kuitenkaan näkyisi. Valaistuksenkin voi lisätä jos viitsii, se näyttää varsin kivalta.
Pieniä perusteita voi lukea jonkun verran lisää ikiwanhasta 3D-tutostani, se on tosin kovin vanhentunut ja pitäisi kirjoittaa uusiksi tai ainakin jatkaa jotta siitä olisi kunnon hyötyä. Efketitopikista löytää myös paljon helmiä, joiden koodia tutkiskelemalla paljastunee paljon uutta. 3D:stä ja CB-piirtelystä yleensä.
Käytännössä kannattaa tallentaa taulukko kolmioista tai verteksitauluun osoittava taulukko kolmioiden kulmien indekseistä, järjestää se kolmion keskimääräisen z-arvon perusteella ja piirtää kolmiot takaa eteenpäin lukituilla viivoilla - Line on vähintään tsiljoona kertaa nopeampi lukittuun pintaan. Lisäksi hommaan voi ympätä kolmioiden normaaleihin perustuvan zcullin eli tarkistuksen siihen, onko kolmio kameraan päin vai siitä poispäin ja poistaa ne, jotka eivät kuitenkaan näkyisi. Valaistuksenkin voi lisätä jos viitsii, se näyttää varsin kivalta.
Pieniä perusteita voi lukea jonkun verran lisää ikiwanhasta 3D-tutostani, se on tosin kovin vanhentunut ja pitäisi kirjoittaa uusiksi tai ainakin jatkaa jotta siitä olisi kunnon hyötyä. Efketitopikista löytää myös paljon helmiä, joiden koodia tutkiskelemalla paljastunee paljon uutta. 3D:stä ja CB-piirtelystä yleensä.
Re: 3D CoolBasicilla?
Hyödyllistä on aina opetella koodaajan mainitsemat asiat, tosin 3D-pelin tekoon ei nykyinen CB hyvin sovellu piirto- ja laskunopeutensa vuoksi. Muistaakseni joku oli joskus tekemässä/tehnyt 3D shooterin...
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: 3D CoolBasicilla?
Mgz teki aikanaan Shadow Squadin (ja mahdollisesti jatko-osan?) joka oli alkuperäisten Doomien tapainen raycastattu FPS-räiskintä. Sama mies kirjoitti omiin CB-suosikkeihini kuuluvat Top Lander -pelit, jotka taisivat olla ensimmäisiä 3D-pelejä CB:llä. Kannattaa tutustua.
Re: 3D CoolBasicilla?
Eipä 3D ole sen vaikeampaa, kuin ensin laskea z-kerroin (aka. syvyyskerroin) ja sitten sillä kertoa koordinaatteja syvyyden mukaan.
Tyyliin:
Kolmiulotteisessa ympäristössä pyöriskeleminen onkin sitten vähän hankalempaa, ja siihen tarvitsee kvaterniota, jota en ole itse vielä opiskellut kunnolla. koodajan 3D-tutossa on kyllä kyseisestä asiasta puhetta.
Tyyliin:
Code: Select all
Const NaytonLeveys = 640
Const NaytonKorkeus = 480
SCREEN NaytonLeveys, NaytonKorkeus
x# = 0
y# = 0
z# = 256
Repeat
//Tiedot näyttöön...
ClearText
AddText "Ohjaa laatikkoa nuolilla"
AddText "Säädä laatikon syvyyttä w/s"
AddText ""
AddText "Koordinaatit: "
AddText "x: "+x#
AddText "y: "+y#
AddText "z: "+z#
//Laatikon ohjaus
x# = x# + 2*(RightKey() - LeftKey()) //Laatikon kaksiulotteinen liikuttelu
y# = y# + 2*(UpKey() - DownKey()) //Laatikon kaksiulotteinen liikuttelu
z# = z# + 2*(KeyDown(cbkeyW) - KeyDown(cbkeyS)) //Laatikon kaksiulotteinen liikuttelu
//Jos z on enemmäin kun nolla, niin piirretään ja lasketaan projektio
If z# > 0 Then
s_z# = 1.0/z# //<- s_z == syvyyskerroin
//Projisoidaan 3D-illuusio ja lasketaan piirtokoordinaatit
s_x# = x#*s_z# * 500 //500 on melko selkeä kerroin
s_y# = y#*s_z# * 500
s_w# = 5 * s_z# * 500
s_h# = 5 * s_z# * 500
//Piirretään laatikko
Box NaytonLeveys/2 - s_w#/2 + s_x#, NaytonKorkeus/2 - s_h#/2 - s_y#, s_w#, s_h#
EndIf
DrawScreen
Forever
Solar Eclipse
We're in a simulation, and God is trying to debug us.