Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Osaatko matikkaa? Mä en

Sivun loppuun

Pyrkyri [28.05.2006 12:37:42]

#

Eli eli, parin päivän nettisurffailun ja kaverien hiillostuksen jälkeen tulin tänne koettelemaan teitä pitkän matematiikan kävijöitä. Itselläni numerot jäi kesken, mutta tässä 3D-grafiikkaa ja koodailua harrastaessani olen joutunut opettelemaan yhtä jos toistakin. Nyt tuli seinä eteen kumminkin.

---->
Minulla on kaksi normalisoitua vektoria. Miten voin verrata niitä keskenään niin että saisin lopputulokseksi yhden luvun joka kuvastaa kuinka paljon vektorit eroaa toisistaan?
<----

Kiitoksia jos joku vaivautuu. Jatkan etsimistä sillä aikaa.

Edit: Ei tarvii enää. Juuri näin, heti kun kysyy foorumilta ongelma ratkeaa kuin itsestään. :)

Metabolix [28.05.2006 13:25:25]

#

"Miten paljon eroaa" on ehkä hieman epämääräinen käsite, mutta siihen yleensä käytetään erotusta eli vähennyslaskua. Normalisoitujen vektorien välisen kulman kosini puolestaan löytyy pistetulolla eli kertomalla komponenteittain ja laskemalla tulot yhteen.

Pyrkyri [28.05.2006 15:28:15]

#

Jees, heti kun löysin tuon pistetulon (dotproduct) ja crossproduct kaavan niin sain tehtyä funktion kätevästi. Kerrotaan nyt kun kerran tuli postattua tänne:

Funktioni ottaa nyt pistetulon vektorien väliltä ja muuttaa sen pienellä laskukaavalla prosenttiluvuksi (mitä suurempi kosini sitä enemmän vektorin suunta poikkeaa toisen vektorin suunnasta, eiks jeh).

Tein tämän funktion QBasiciin (frendi joka koodaa C++:aa is lost in time and space) jotta saan testattua uutta ideoimaani Sprite Normal-Mapping engineä (varmaan joku toinenkin on tehnyt tämän). Alkaa näyttää jo aika hyvältä. Voisin varmaan ensi viikolla postata aika tiukkaa settii miten 2D isometrisessä pelissä voidaan käyttää normal- ja offset-mäppejä laskemaan valoisuuksia ynnä muita ennen vain 3D-peleille ominaisia efektejä.

Metabolix [28.05.2006 16:40:06]

#

Tuota, jos kosini on 1, kyseessä on sama vektori, ja vastaavasti -1, niin vektorit ovat vastakkaissuuntaiset. Eli juuri päinvastoin.

msdos464 [28.05.2006 17:22:17]

#

"jos kosini on 1, kyseessä on sama vektori"

Tai siis saman suuntaiset.. pituus voi olla vielä eri.

Metabolix [28.05.2006 17:37:18]

#

msdos464, alkuperäisessä kysymyksessä vektorit olivat normalisoituja.

Pyrkyri [29.05.2006 12:22:04]

#

Uuups, joo tottakai. Kosini = 1 tarkoittaa samansuuntaista. Koska laskukaava tulee normal-mäppeihin niin jäi huomaamatta koko juttu koska 1 tarkoittaa että pixeli ei ota valoa (osoittaa poispäin valosta) ja -1 tarkoittaa että pixeli ottaa maksimivalon (osoittaa valon suuntaan).

Sain tekastua jo QuickBasicilla aika hienon normaali valotuksen lattiaan joka ottaa valonlähteen vektorin ruuduittain. Pitää katsoa jos saan iltaan mennessä per-pixel normaalivalotuksen niin voisin lähettää tutkimustyön tulokset huomenna teidän ihmeteltäväksenne.

Tässä screenshotti ruuduittain valotuksesta:
http://danankai.net/media/scrap/qhax.gif

Pyrkyri [29.05.2006 17:01:39]

#

Noniin, PerPixel valotus valmis. Lisätty myös kirkas alue valolle. Vois varmaan lopettaa tän topicin ja siirtyä ihan tonne koodauspuolelle.

PerPixel

Mjum, mjum, seuraavaksi seinät ja offset-mäppäys...

Meitsi [29.05.2006 17:54:48]

#

Näyttää hienolta. Vielä kun teet tuohon vaikka kiilto-mappauksen niin vaikka lasinen lattia heijastaa peilikuvan ukosta joka kävelee sen yli :) Voisi olla aika nätti ominaisuus.

Lebe80 [29.05.2006 17:58:26]

#

Meitsi kirjoitti:

Näyttää hienolta. Vielä kun teet tuohon vaikka kiilto-mappauksen niin vaikka lasinen lattia heijastaa peilikuvan ukosta joka kävelee sen yli :) Voisi olla aika nätti ominaisuus.

Isometrisessä grafiikassa tuo "peilikuvan" tekeminen vaan ei onnistukaan niin helposti. Ylösalaisin kääntäminen tuo vaan sellaisen bugisen fiiliksen, jos tuohon lisää esim. ihmisiä (jalkojen heijastukset menevät miten sattuu).

Antti Laaksonen [29.05.2006 21:51:47]

#

Hyvältä näyttää! Ainakin minua kiinnostaa, miten tuollainen tehdään.

Pyrkyri [29.05.2006 22:55:31]

#

Okei, FPS 0.3 mutta ainakin toimii. Toisaalta en ole järin hyvä koodaaja. Minäkin mietin noita specular-, reflection- ja refraction-mäppejä, mutta niiden teho menee suurimmilta osin hukkaan kun kamera ei liiku. Pittee kattoo onko ne liian vaikeita/raskaita tehdä erikoisefekteiksi.

Tässä se nyt on. Kahden viikon aivomyrskyn ja kolmen päivän rankan koodaamisen ja tekstuurien tekemisen jälkeen (joojoo, ne on Doom kakkosesta fuxxoroituja), saanen esitellä teille:

3D-Lit Isometric Engine

"Done in QBasic 4.5, mit der AK-Lib for 1280x1024 resolution"

-Kirjotan design documentin ton enginen toimintamallista ja miten sitä tulisi jatkaa, mutta nyt on vähän sippi rankan ohjelmointiurakan jälkeen.

Metabolix [29.05.2006 23:02:24]

#

Varsin vakuuttavaa sinänsä, kerrankin joku oikeasti tekee jotakin eikä vain metelöi tulevasta 3D-sotapeliprojektihirvityksestään. Mutta aika tavanomainen 3D-systeemi tuo sinänsä on. Jos haluat joskus laittaa koodia esille tai selittää toimintaa noin teknisesti, niin kiinnostaisi kuulla tuon toteutuksesta. Itse taidan SW-valaistuksessa tyytyä laskemaan polygonien kulmat, kun OpenGL osaa kuitenkin vetää ne sitten liukuvärisiksi sillä perusteella.

Valaistuksen voimakkuus on tyypillisesti pinnan normaalin ja valoa kohti osoittavan vektorin pistetulo jaettuna etäisyyden neliöllä. Jotakin optimointia vain kaivataan, jotta laskenta sujuisi sutjakkaammin.

Meitsi [29.05.2006 23:18:36]

#

Jos tuon kääntäisi QBasicista C/C++:saksi ja käyttäisi grafiikkaan vaikka SDL:lää, voisi fps nousta aika reippaasti. Tietenkin tuollainen onnistuisi sitten myös käyttäen valmiita rajapintoja. OpenGL ja DirectX kait tukevat noita efektejä suoraan, joten luultavasti riittäisi vain niiden päällekytkeminen ja asetuksien viilaus, laitteistokiihdytys astuisi tällöin myös kehiin. Tällöin kyllä menisi koodaustyötä hukkaan, mutta tuotahan voisi soveltaa vaikka selain java-appletissa (saako selain-javassa hw kiihdytyksiä?)

Metabolix [30.05.2006 10:05:46]

#

Pikselivalaistusta ei taida noista ihan suoraan löytyä, tai ainakin se on hyvin heikoilla. OpenGL:n sisäinen valaistusjärjestelmä ei tue kuin kahdeksaa valoa, mikä ei kunnon peleissä riitä minnekään, noista kun joutuu vielä kaksi käyttämään ympäristö- ja hajavaloon. Valaistus täytyy siis itse kirjoittaa GLSL:ää tai vastaavaa varjostinkieltä käyttäen, jotta sen saa rautapuolelle.

nomic [30.05.2006 15:44:32]

#

Täytyy myöntää, että hyvältä näyttää! Ja kuten Metabolix aikaisemmin ilmoitti, mukava nähdä tämmöistä, että saadaan oikeasti jotain aikaiseksi, kuin noita "3D-sotapeliprojektihirvityksiä". ;)

Pyrkyri [30.05.2006 18:52:49]

#

Mitäköhän mun serverille tapahtui? Itseasiassa mitä koko Introitelle tapahtui? Joudun sortumaan ilmaispalveluihin, hyi.

Okei, viimeinen testi: Objektit. Tämähän toimii kuin junan vessa. Minulta ei puutu muuta kuin plugini tai tekniikka 3D-Maxiin jolla saisin noita korkeuskarttoja näppärästi (testiversion korkeuskartat ovat kivuliaasti maalattu pixeli pixeliltä, usko tai älä). Pitää kokeilla jos Mental Ray'tä sais fuxxoroitua vähän. Kun sen saan on visuaalinen tuotantolinjani valmiina.

Pöytä et boxeja

Joo OpenGL:n tai Direct3D:n kautta vois saada näyttökortit laskemaan noita normaalivektoreita ainakin. Vissiin. Ehkä... mutta sehän olisi vastoin isometrisen 2D pelin etiikkaa. Ei tarvitse FPS:stä huolehtia sen jälkeen kunhan QuickBasicista on päästy.

Nyt ei muuta kuin Design Documenttia kirjottaa, aloitan päivän parin päästä saalistamaan ihmisiä jotka osaavat C-kieltä ja ovat innostuneita uudenlaisen retro-enginen kehittämisestä. Homman ideana se, että jos he aluksi tekisivät tämän Ceelle ja jatkavat sitten sen kehittämistä (itselläni loppui laskupää tähän). Minä aloitan tekstuurien ja spraittien takomisen. Niin no miksei myös lisää ihmisiä jotka osaavat tehdä contentia (kuvaa, ääntä, jne)...

Kahtellaan mitä saadaan aikaiseksi.

Meitsi [30.05.2006 21:52:05]

#

Hieno on. Varjot objekteille voisi olla myös asiallinen feature. Ihan perus varjothan saisi että tekisi jokaiselle objektille vaikka 2d-maskin jossa olisi merkitty pikselit joista valonsäde kulkee ja ne, joista se ei pääse läpi. Esim pöydän jalat olisi merkitty maskiin neljänä neliönä kuvan reunoilla. Kun vielä laittaa ukkelille taskulampun käteen jota voi hiirellä pyöritellä niin ShadowGrounds-klooni on valmis :)

Pyrkyri [31.05.2006 10:26:26]

#

Varjot olivat yksi aivoriihen topikeista. Jeps, perusvarjot olisi helppo tehdä uhraamalla yksi väri paletista "varjoväriksi" joka tummentaisi taaksejääviä pixeleitä 50% tai jotain. Toisaalta jos grafiikka näyttää jo tuolta niin varjoja ei välttämättä tarvita ollenkaan. Olisihan se mahtava Esan-venytys feature taas lisää...

Mutta kun kerran valot ovat aika epä-ortodoksiset niin eihän varjot voi pistää pekkaa pahemmaksi. Nuo perusvarjot näyttäisivät aika pahalta jos alkaa kunnolla hyödyntää tätä valaistusmoottoria jonka olen jo väsännyt.

Mitä jos valo on pöydän alla?

Koska pystymme height-mapin ja objektin z-offsetin avulla määrittämään jokaiselle pixelille sen kolmiulotteisen sijainnin niin periaatteessa voisimme raytraceta valonlähteestä kohdepixeleihin. Itse en osaa tämmösiä väsätä, mutta teoriassa mahdollista. Siitä miten se pyörii ja miten pakollinen feature se on, voi olla montaa mieltä.

Hmmm...
Pixel = x,y,color (in two dimensional space)
Voxel = x,y,z,color (in three dimensional space)
Therefore:
Poxel = x,y,z,color (in two dimensional space)
:D

Freeze [31.05.2006 14:57:51]

#

Pyrkyri millä kielellä teit ton?

Pyrkyri [31.05.2006 17:24:36]

#

Lukee tuolla jossain:

QBasic 4.5

(käytin AK-lib:iä saadakseni näytön resoluutioksi 1280x1024)

Se saa kyllä nyt kyytiä sillä sain viimeisenkin työkalun (tai tarkemmin sanottuna tekniikan) jolla teen noita height-mäppejä (aloin kutsumaan niitä jo hate-mäpeiks pixeleitä paukuttaessa) eräs ystävällinen sielu CG-Talk foorumilla kertoi sen minulle.

Design Document valmistuu hyvää tahtia, jos saan sen valmiiksi huomenna (pitää testata mitä puhuu koodaamalla tolla QBasicilla uudestaan ettei puhu p**kaa) niin alan etsimään kiinnostuneita C-ohjelmoijia. En siis jatka enempää tuota QB-versiota koska tiedän ettei engine pyöri sillä.

Projektin ideana alustavasti siis että minä teen Grafiikkaa ja orj... ohjelmoijat moottoria. 8=)

JÄYRGH, sain tänään rahaa = ->Kaljalle. :D

Grey [31.05.2006 18:33:16]

#

Mutta minuapa kiinnostaisi tuon Qb-enginen koodi. Kyllä sillä vähintään pystyisi leikkimään ;-)

-Grey-

Pyrkyri [01.06.2006 13:54:55]

#

Ah damn, kerkesin jo muuttaa koodin kelvottomaksi, mutta tottakai, saat sen sitten kun oon koodannu sen kunnolla.

Ei sillä kyllä kovin hauska ole pelleillä. Ehkä jos ois parempi kone (800mhz) niin sitten, tein sen vain testatakseni teoriaa. Mutta tiedätkö millä on hauska pelleillä? Tein tossa Tammi-Helmikuussa haasteen Thomas Biskupille (ADOM:in tekijä), en kerenny lähettää tätä hänelle ja sitten se vähän räjähti pelkästä Rogue-Like tutoriaalista jo aivan omaksi engineksi.

QHACK

Jos saatte jotain aikaseksi tuosta niin ilmottakaa.

Pyrkyri [01.06.2006 15:04:59]

#

Ohhoh, aamen backupeille.

Sitä saa mitä tilaa

Imuttaessa tiedoston hyväksyt täysin ettei ohjelman tekijä ole missään vastuussa käyttäjän (sinun!) koneen, näyttökortin tai näytön hajoamisesta, ennakkoluulojen romahtamisesta QBasicia kohtaan, elämän jatkumisesta tai mielenrauhasta ylipäätäänsä.

edit: Hei, oikeesti ihmiset, ottakaa selvää voiko tuo AK-Lib tehdä hallaa näytölle/näyttökortille. Oon kuullu et nuo QBasicin resoluutiovaihdokset + kryptinen näyttis = paljon kyyneliä

Metabolix [01.06.2006 15:20:32]

#

He-he-hei, eipäs laiteta sitä laitonta QB:tä pakettiin mukaan!
Eipä tuo edes toiminut. VESA-tukea ilmeisesti jäi kaipaamaan.

Cc [01.06.2006 15:32:36]

#

Jos saatte (uskon että saatte) tuon pelimoottorin käännettyä c/c++ kielille niin kirjoittakaa ihmeessä ohje siitä, miten voi tehdä pelimoottorin. Uskoisin, että sellainen kiinnostaisi monia koodaajia, jotka eivät vielä ole perehtynny pelien tekemiseen ja miks ei niitäkin, jotka ovat perehtyneet peliohjelmointiin.

Pyrkyri [01.06.2006 15:32:40]

#

Uuups. Sorkee, korjaan asian välittömästi.

Joo se AK-Lib vissii heittää vaa pihalle jos näyttis ei tue. Harmi. Tsekkaa tuo QHack ihmeessä, siinä ei oo mitään kummallisuuksia.

Siis koko tuo "moottori" käsitys on aika hanurista. Sitä alettiin käyttää yleisesti Duke3D:n ja Quaken aikoina. Se ei ole mitään muuta kuin pohja jossa on kaikki tarvittava (funktiot tekoälyyn, taisteluun, liikkumiseen, jne.) ainoa mikä puuttuu on sisältö (content).

Jos imutat ja avaat esimerkiksi tuon Qhack:in niin se on aika mallillaan oleva moottori jo. Voisin käydä siihen tekemään kenttiä joita saisin helposti ladattua (muistaakseni, en oo availlu tuota pitkään aikaan), pystyn muuttamaan fontteja mieleisemmäksi ja saisin hirviöt pieksee toisiaan (pelaaja on vain yksi hirviö muiden joukossa).

Toisaalta tuo selventää asioita aika paljon. Aina kannattaa ensin tehdä moottori ja vasta sitten sisältö. Kaikki sisältöihin tarvittava koodaus tehdään skripteillä (QHackin skripti engine on melkein valmis, kunhan innostuisi jatkamaan sitä joskus).

miiro [02.06.2006 07:56:22]

#

Wow! Tosi hieno. Valaistus on erittäin aidon oloinen. Jos joku tekee tuosta C-version, ja jos C-versio nostaa fps:ää huomattavasti, tuohon voisi tehdä vielä jonkun jutun, joka Ja peilikuvasta puheen ollen, eikö tuohon voisi saada peilikuvan, jos sen kuva olisi erillinen kuva?

miiro [03.06.2006 12:18:30]

#

Hmm...entäs jos halutaan kaksi soihtua tai erillisiä soihtuja seinille? Voisitko näyttää esimerkit niistä?


Sivun alkuun

Vastaus

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

Tietoa sivustosta