Onko kukaan tehnyt sellaista 3d-engineä missä määrätään ensin kappaleiden koordinaatit ja sitten "kameran" koordinaatit ja kulma. Kamerahan on siis se, mikä "kuvaa" esineitä ja sen kulman perusteella piirrettäisiin esineet näytölle. Olen kyllä nähnyt (ja itsekin tehnyt) sellaisia 3d-moottoreitta, kuten 3d-kuutio ja tekemäni 3d-pallo, joita voi pyörittää akselin ympäri ja katsella eri kulmista, mutta nyt pitäisi saada peli aikaiseksi ja kamera on niinkuin ohjattava ukko, jonka silmistä maailmaa katsotaan. Olen yrittänyt itsekin ja onnistunut jotenkuten, mutta ei toimi vielä aivan täysin. Jos jollain on kokemusta, niin voisitteko kertoa, millä laskukaavoilla sen saa tehtyä. Rautalanka riittää. Jos joku olisi tehnyt vaikka funktioita, jotka pisteen 3d-koordinaattien, kameran 3d-koordinaattien ja kameran kulmien mukaan palauttaisivat pisteen 2d-koordinaatit, joiden mukaan piste piirretään näytölle. Loppu on selvää, täytyy vain vetää viivat pisteestä pisteeseen jne...
Minä olen joskus tälläistä yrittänyt mutta jätin kesken.
Tässä on oma heikko käsitykseni QB:n kolme deestä
SCREEN 13 Q = -160: W = -100: E = 160: R = 100 T = -140: Y = 80: U = 140: I = 80: O = 1: P = 1 A = 140: S = -80: D = -140: F = -80: G = -370: H = 200: J = 1: K = 1 DO: WINDOW (Q, W)-(E, R) LINE (T, Y)-(U, I), 7: LINE (U, I)-(A, S), 7: LINE (T, Y)-(D, F), 7: LINE (D, F)-(A, S), 7 LINE (T, Y)-(G, H), 2 LINE (-80, -80)-(-80, 40), 6: LINE (20, 40)-(-80, 40), 6: LINE (20, 40)-(20, -80), 6 LINE (0, 0)-(2, 2), 138, BF: LINE (3, 0)-(5, 2), 66, BF A$ = INKEY$ J = INT(RND * 1) + 15 IF A$ = "D" THEN G = G - J: D = D - J: H = H + O: F = F - P: A = A - J: S = S + O * 2: T = T - J: U = U - J: Y = Y + P: I = I - O * 2: O = O - .05: P = P + .06: CLS 2 IF A$ = "A" THEN G = G + J: D = D + J: H = H - O: F = F + P: A = A + J: S = S - O * 2: T = T + J: U = U + J: Y = Y - P: I = I + O * 2: O = O + .05: P = P - .06: CLS 2 IF A$ = "W" THEN Q = Q + J * 1.6: W = W + J: E = E - J * 1.6: R = R - J: CLS 2 IF A$ = "S" THEN Q = Q - J * 1.6: W = W - J: E = E + J * 1.6: R = R + J: CLS 2 IF A$ = " " THEN END LOOP
Kätin tossa WINDOW käskyä
Itsekkin painin saman ongelman kanssa ainakin VIIKON! Kameran liikuttelu on simppeliä, mutta katselukulma tuotti mulle ongelmia. Toteutinkin sen hyvin omaperäisesti :=)
Eli mulla on kaksi taulukkoa joihin olen laskenut valmiiksi paljon katselukulmia ja kun käyttäjä liikuttaa hiirtä taulukoidenindexi muuttujat muuttuvat...
Toimii kuten Quakessa ja ilman laskutoimituksia!!
lainaus:
Tässä on oma heikko käsitykseni QB:n kolme deestä
Ja ymmärrän erittäin hyvin miksi käytit sanaa "heikko" :P
Hienosti pelaa - muuten - mutta tuokin on selvästi vain tavallaan kappaleen ympäri pyörivä kamera. Huoneesta ei pääse mitenkään ulos tarkastelevaan seinää toiselta puolelta.
lainaus:
Eli mulla on kaksi taulukkoa joihin olen laskenut valmiiksi paljon katselukulmia ja kun käyttäjä liikuttaa hiirtä taulukoidenindexi muuttujat muuttuvat...
Kiva systeemi sinänsä, vaikkei sitä ehkä voi aivan moottoriksi sanoa, mutta sekin kelpaisi näin aluksi. Mutta jotenkinhan ne muuttujatkin pitää siihen taulukkoon lasketa. Ja jos tietäisin miten, funktioista voisi tehdä saman tien moottorinkin. Vai oletko kopioinut taulukon tekstitiedostona jostain muualta? Jos olet, niin pistäisitkö mailina. (osoite löytyy profiilista)
ei mutta kattokaas tätä
http://www.angelfire.com/id2/qbkaboom/
Jep olen jo kerran ladannut tuon netistä, enkä vieläkään tajua miten se on voitu tehdä QBasicilla.
Edit:
Mainitsinkin jo asiasta eräässä varhaisemmassa keskustelussa:
https://www.ohjelmointiputka.net/keskustelu/2241-3d
Lataan taulukot tekstitiedostoista, jotka olen luonut apuohjelmalla joka pyörittää matriisia ja tallentaa arvot tiedostoon.
Moottoria yritin ensin tehdä samoista funktioista mutta se bugitti.
Ja käyttämäni tekniikka on nopeampi kuin se, että laskettas uudet arvot aina matriiseilla.
Niin tietystihän se on nopeampi kun ei tarvitse laskea uudestaan vai kaikki on valmiina muistissa. Apuohjelma ei siis ole itse tekemäsi? Minkä niminen ja saako sen netistä?
Apuohjelma on tekemäni. Pari riviä koodia...
Sulla on lookAt matriisi, niin pyörittelet sitä ympäri ensin X-akselin suunnassa, teet arvoista tiedoston ja sit sama y-akselille.
Yritätkö koodata sitä QB:lla vai VB:lla? Käytä d3d:tä. Siellä on valmiina Rotation matriisit.
QB:llä teen... Siis meinaatko nyt Sini- ja Kosiniarvoja, jotka täytyy ottaa ylös? En tunne d3d:tä, eikä minulla siis taida sitä ollakaan. Ja mitä meinaat LookAt-matriisilla, onko se justiin niitä ympäri-kiertävä-kamera juttuja vai onko se jokin VB:n funktio?
Perusideahan minulla on selvä: Täytyy laskea kameran ja kappaleen välinen kulma, sekä kappaleen ja kameran etäisyys toisistaan. Etäisyydenhän saa helposti pythagoraan hypotenuusan laskukaavalla:
a^2 + b^2 = c^2
Eli etäisyys = SQR(ABS(kamerax-esinex)^2 + ABS(kameray-esiney)^2)
Ja jotenkin pitää laskea kameran katselukulman ja kameran ja esineen välisen kulman erotus...
Näillä periaatteilla sain ainakin oman moottorini jotenkuten toimimaan, mutta kun katsoo alaspäin, kaikki vääristyy hämärästi.
Meinaan vektoreita. LookAt on yksi d3d:n kamera matriiseista joka siis kertoo mihinpäin kamera on suunnattu. LookAt matriisi koostuu kolmesta vektorista, jotka sisältävät katselukohteen X,Y,Z koordinaatit. Latailen sieltä tiedostoista noita vektoreidenarvoja, en sini- ja kosiniarvoja.
Just... oon kuullut noista vektoreista ennenkin. Mutta onhan silläkin merkitystä, missä kamera on? (X,Y,Z) Kaikkien desimaalien kanssa mahdollisia katselukulmia on kuitenkin äärettömästi, vai pyöristyykö se aina lähimpään muistissa olevaan?
Ja mitkä INPUT-arvot sille matriisille pitää antaa, että se antaa OUTPUT-arvoina 2d-koordinaatit x ja y?
Homma toimii siten, että lisään "katselusuunta" matriisiin "kameranpaikka" matriisiin... Älä ymmärrä, että kamera osoittaa johonkin kohteeseen, vaan se osoittaa johonkin suuntaan. Katsekulmia on äärettömästi, mutta minun kamerassa:
Kamera pyörii vaaka-akselilla 180 erikohtaan ja pysty-akselilla 300 kohtaan. Tästä voit sitten laskea moneenko eri kulmaan minun kamera taittuu...
Kannattaa lukea, opetella ja ymmärtää matikankirjasta vektorit ja matriisit. Niiden osaamisesta on paljon hyötyä.
Voi olla tosiaan vähän vaikea ymmärtää kun ei ole matikassa ollut vielä noita vektoreita. Itse asiassa ei ole ollut vielä edes trigonometriaa, mutta sen olen opetellut ihan itse, kun ei jaksanut odottaa. Voisihan niistä vektoreistakin vakoilla matikankirjasta jo ennalta. Tai jaa, onko sulla Kolmio-sarjan kirja, että onkohan se sama?
Mulla on "Tekniikan Matematiikka 1" Olen AMK:ssa. Itse opettelin perusteet netistä, ennen koulun alkua...
No ne voi olla sitten sellaisia asioita, joita ei yläasteen kirjoista löydy. Pitää katsoa netistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.