Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Seiniä (peliohjelmointi)

Sivun loppuun

Touho [20.05.2005 15:42:49]

#

Kun olen tehnyt peleihin kenttiä, olen tehnyt ne tähän asti palikoista. Eli on yks bool taulukko, jossa arvo 1 tarkoittaa seinää ja 0 läpimentävää koloa. Ja liikkuessa tarkastellaan onko määpäärässä seinä vai ei.

Ongelmia alkaa tulla vastaan kun olen nyt siirtynyt 3D ohjelmointiin. On erittäin työlästä tehä näitä testejä kolmessa ulottuvuudessa. Mutta itse ongelmana on se, että jos on joku vino taso(ei pelkkiä palikoita), ei minun tavalla voi testata, missä on seinä.

Jos mulla olisi joku km*km*km kokoinen pelialue ja siihen pitäis jokaiselle pikselille antaa arvo että onko se este vai ei, siitä tulis suht iso.. :D

Millä keinolla liikkumisen esto pitäis toteuttaa? Luultavasti tälläsen moottorin tekeminen on tästä eteenpäin aika iso urakka.

Ohjelmoin C++:lla (OpenGL, GLFW).


EDIT: Helposti sanoen: Miten tehä Liero-ohjattavuus tai Joku 3D räiskintäohjattavuus?
Oon itse päässyt tähän asti:
http://zux.sjr.fi/touho/mover/Mover.exe ohjattavuus: nuolinäppäimet (8 suuntaa), seinät
http://zux.sjr.fi/touho/mover/Mover2.exe ohjattavuus: hiiri, w, a, s, d, ei seiniä

tuomas [20.05.2005 16:17:57]

#

Itsellä ei ole kokemusta 3D:n kanssa tuollaisen tekemisestä, mutta uskoisin että saat tarkistukset tehtyä ihan vain kordinaatteja vertailemalla.

Heikki [20.05.2005 16:36:17]

#

3d-avaruuden törmäystarkistukset ovat hankalia toteuttaa (ainakin verrattuna 2d:n vastaaviin). Itse olen tätä yrittänyt opetella mutta ei ole ollut aikaa. Putkan haulla löysin tälläiset linkit: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=30
http://www.gamedev.net/reference/articles/article1026.asp

Touho [20.05.2005 17:57:12]

#

tuomas, jos ns. päähenkilössä on 20 kulmaa ja kentällä on 100 objektia, on melkö typerää jokaisen pisteen suhdetta verrata toisiinsa, joten siinä pitää joku logiikka olla :)

Metabolix [20.05.2005 18:12:46]

#

Lue ihmeessä NeHe:n tutoriaaleja, ettei tarvitse samoja asioita uudestaan kirjoittaa.

Maailma kootaan kolmioista, koska niitä on helppo piirtää OpenGL:llä (TRIANGLE_STRIP on paras) ja ne ovat tasokuvioita pisteistä riippumatta. Neljä pistettä voi asetella jo niin, että ne eivät ole enää samassa tasossa.

Käyttäen tason kaavaa (aX + bY + cZ + d = 0, missä [a, b, c] = tason normaali, joka kannattaa jokaiselle tasolle laskea aluksi) saat laskettua, kummalla puolella tasoa jokin piste on (sijoittamalla siis X:n, Y:n ja Z:n paikalle pisteen koordinaatit). Vertaamalla pisteen aiempaan tilanteeseen saat selville, oletko liikkunut tason läpi.

Kaavasta saa suoraan 2-ulotteisen version (jolla siis selvitetään, kummalla puolella jotakin suoraa tietty piste on), ja kahdella eri suunnista katsotulla 2-ulotteisella tarkistuksella saa selville, onko kyseinen piste tason alueella (eli oletko pöydällä vai samalla korkeudella jossakin muualla).

Touho [20.05.2005 19:54:36]

#

Ongelmana NeHe:ssä on se, että glfw käyttää aivan eri tekniikkaa kuin NeHen oppaissa. Niitä pitäis sitten yhdistellä alottelevana OpenGL:n käyttäjänä. :/

Metabolix, onko sitten järkevin konsti laskea jokaiselle avaruuden kolmiolle se normaali ja testata onko esine mennyt sen ohi?

Touho [21.05.2005 13:26:28]

#

Glfw on erittäin helppo tapa tehdä esim ikkuna OpenGL:llä, mutta oppaita siihen on vähän. Ainoa kunnon opas, mitä oon siihen löytänyt on GLFW:n kotisivujen oma: http://glfw.sourceforge.net/ Olen lukenut sen kokonaan ja nyt tarvisi lisää.

NeHe:n tutorialit näyttää mainioilta, mutta siellä ei glfw:a oppaissa ole, joten olen alkanut vähän miettiä luopumista glfw:sta. Onko tämä tarpeellista?

Deewiant [21.05.2005 13:44:54]

#

GLFW:a ja NeonHeliumin juttuja voi yhdistellä ihan hyvin. Muistaakseni suurinpiirtein ainoat asiat, jonka NeHe tekee yhteensopimattomalla tavalla ovat ikkunan avaaminen ja inputin otto. Nämä kannattaa tehdä GLFW:llä ihan vain helppoudenkin takia, käyttöjärjestelmäriippumattomuus on tietysti aina bonusta.

Minä ainakin käytin GLFW:a ja paljonkin NeHen tutoriaaleista löytyvää tavaraa MMV-demossa, joka löytyy esimerkiksi ihan täältä 'Putkasta, jos sen lähdekoodia haluat katsella. 3D-törmäystarkistusta ei siitä kuitenkaan löydy.

Touho [21.05.2005 15:09:03]

#

en löydä mistään NeHe:n oppaissa käytettävää "glaux.h":ta

EDIT: sain kaikki nyt toimimaan

Metabolix [21.05.2005 19:32:10]

#

No mutta OpenGL:llä ei ole mitään tekemistä 3D-törmäysten kanssa. Ne voi helposti poimia NeHe:n tutoriaaleista erilleen.

Tuo selostamani tapa on yksinkertaisesti järkevimpiä. Suosittelen, että kehität kaavat itse, koska silloin ymmärrät, mitä teet. Oppaita kyllä löytyy. "Tietorakenteet ja Algoritmit" tai jokin vastaava kirja on myös suureksi avuksi. (Ja muutenkaan en halua antaa valmista koodia.)

Jos epätarkempi tarkistus riittää, ei tarvitse tarkistaa tyypin jokaista kulmaa, vaan voit tehdä vain palikka- tai pallotarkistuksen, eli lasket tyyppiä ympäröivän särmiön tai käytät tyypin sädettä ja tarkistat, että olet vähintään säteen etäisyydellä seinästä. En sitten tiedä, kuinka se tarkalleen 3D:ssä onnistuu.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta