Eli tein yksinkertaisen avaruusalus wannaben blenderillä ja exporttasin obj tiedostoksi saadakseni testimateriaalia .obj parserilleni. Lopussa oli kuiteskin kohta mistä en ymmärtänyt miten se pitäisi tulkita.
Eli alkuun tulee oikein v, vt, vn ja f v/vt/vn v/vt/vn /v/vt/vn rivit. Eli tähän tyyliin:
v 0.807430 -0.467906 -24.000000
v 4.000000 -0.999999 23.999998
v -4.000001 -0.999999 23.999994
vt 1.000000 1.000000
vt 0.140849 0.514534
vt 0.096747 0.509678
vn 0.943519 -0.330395 -0.024726
vn 0.934171 -0.187597 -0.303531
vn 0.943519 0.125651 -0.306568
f 355/1/9 350/2/9 339/3/9
f 350/1/10 355/2/10 354/3/10
f 340/1/11 354/2/11 355/3/11
So far so good. Mutta sitten:
f 103 133
f 103 104
f 104 105
Mitäs faceja nämä on? 3d malli jonka exporttauksessa valittiin että blender tekisi kaikista polygoneista kolmioita joten mitä nämä ovat? Jätin nuo pois ja laiva kyllä tulee esiin mutta toinen laita jotenkin välkkyy. Liekkö noiden puute(35 kipaletta) syy vaikko piirtorutiinissa jotain häikkää. Muut arvot näyttävät kyllä pelittävän.
Teikkö itte parserin? saako sitä kattoa?
Ootko varma ettei noi ole edgejä.
En tiedä mitä ne on. Sitähän minä tässä ihmettelen että mitä ne ovat ja miten niihin pitäisi reagoida. Tein siis mallin, exporttasin .obj tiedostoksi ja kas! Nuo f xxx xxx rivit olivat siellä viimeisinä. Ja nyt haluaisin tietää miten parserini pitäisi reagoida niihin.
(ja tuo välkkymisongelma ratkesi. Eli nyt kaipaisin lähinnä tietoa mitä nuo eri muodossa olevat f:t ovat. Ja miksei niille voitu keksiä omaa kirjainta :-/)
Edge eli reuna. Neliössä on neljä reunaa ja kuutiossa 12. Kokeile semmosta että teet blenderillä planen josta poistat kaksi verteksiä. Eksporttaat tämän 3d-mallin (joka siis sisältää 2 verteksiä ja yhden reunan niiden välissä) ja annat sen parserille. Tuleeko silloin pelkkä yksi face, jolla on kaksi indeksiä. Kokeile myös samaa tekemättä polygoneista kolmioita.
Hum. Niitähän ne näyttäisi olevan mutta miksi nuo olisi aluksen obj tiedostossa? Se kuiteskin koostuu kuutiosta jota olen vain levennellyt ja muokannu. Noh ei se ulkonäkö tunnu muuttuvan vaikka poistan mokomat häiritsemästä. Sekoittavat vain parserini jokatapauksessa.
Ehkä Bee ei löytänyt kyseisille kolmioille kolmatta pistettä. Miten kävi jos painaa Remove Doubles . Varmaan tiiätkin. Eivätpä noi mitään haittaa, kun kahdesta pisteestä koostuvassa facessa ei ole mitään rendattavaa. vissiin.
pipo kirjoitti:
Eivätpä noi mitään haittaa, kun kahdesta pisteestä koostuvassa facessa ei ole mitään rendattavaa. vissiin.
Voi ne piirtää viivoina (GL_LINE). Se on yksi (harvinainen) tapa toteuttaa vaikka rautalanka tai verkkoaita.
pipo kirjoitti:
Ehkä Bee ei löytänyt kyseisille kolmioille kolmatta pistettä. Miten kävi jos painaa Remove Doubles . Varmaan tiiätkin. Eivätpä noi mitään haittaa, kun kahdesta pisteestä koostuvassa facessa ei ole mitään rendattavaa. vissiin.
Noh ellen keksi miten parseroida ne hiiteen tai poista käsipelillä(ratkaisu johon itse päädyin) sekoittaisi parserin pahemman kerran joten on niistä hiukan haittaa ;-)
Mutta asiasta toiseen pystyykö openGL:ssä säätämään piirtosyvyyttä? Nyt näyttää vähän hassulta kun objekti joka on viellä selvästi näkyvissä koonsa puolesta katoaa mustuuteen. Hiukan häiritsevää :-(
Voithan parserissa todeta, että luvut loppuvat kesken, ja jättää sillä perusteella rivin huomioimatta. Tosin OBJ-formaatin kuvauksessa mainitaan, että tuollaisia rivejä ei saisi olla, joten kyseessä on ilmeisesti virhe käyttämässäsi ohjelmassa.
Varmaan jossain kohti OpenGL:llä asetat perspektiivin eli projektiomatriisin? Kannattaa tutustua asiaankuuluvien funktioiden (glOrtho, glFrustum tai gluPerspective) toimintaan vaikka manuaalin avustuksella. Piirtosyvyyden kasvattaminen heikentää luonnollisesti myös syvyystarkistuksen tarkkuutta, joten kannattaa kasvattaa varovasti.
Mallit voi myös skaalata siihen kokoon kun haluaa. Itse oletan että luku 1 vastaa reaalimaailmassa yhtä metriä. Avaruuspeleissä ehkä fiksumpaa laittaa se vastaamaan jopa kymmentä tai sataa... Sillä on suuri merkitys kuitenkin syvyyspuskurin kanssa. 2 pintaa kun leikkaa toisensa niin tapahtuu ns. aaltoilua, joka saattaa olla häiritsevämpää suurilla luvuilla. (ei niitä auta kun testata)
tneva82 kirjoitti:
on niistä hiukan haittaa ;-)
Avaa laiva blenderillä ja tarkastele jotain ongelmallista pistettä
esim "f 103 133" (View propertyt / 3D Cursor x: 103 y: 133 / jne). Jos ei näy virhettä tai mitään häiritsevää niin voit kokeilla Remove Doublesia. Mulla löytyy niitä vähän väliä. On ollu ylikin 35 kipaletta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.