---

CoolBasiciin yleisesti liittyvä keskustelu.
Post Reply
User avatar
seancarrion
Active Member
Posts: 128
Joined: Sun Jan 01, 2012 12:37 pm
Location: ---

---

Post by seancarrion » Wed Jan 18, 2012 2:20 am

---
Last edited by seancarrion on Sun Jun 26, 2016 3:56 am, edited 1 time in total.
---

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: 3D CoolBasicilla?

Post by koodaaja » Wed Jan 18, 2012 4:41 am

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ä.

User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: 3D CoolBasicilla?

Post by axu » Wed Jan 18, 2012 10:03 am

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...
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image

User avatar
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: 3D CoolBasicilla?

Post by koodaaja » Wed Jan 18, 2012 10:50 am

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.

User avatar
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: 3D CoolBasicilla?

Post by MaGetzUb » Wed Jan 18, 2012 11:19 am

Eipä 3D ole sen vaikeampaa, kuin ensin laskea z-kerroin (aka. syvyyskerroin) ja sitten sillä kertoa koordinaatteja syvyyden mukaan. :)
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

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. ;)
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.

Post Reply