Quad Tekstuuri !
Minulla on rakenteilla lautapelejä Java LWJGL kirjastolla, OpenGL ei ole kovin tuttu vielä, tässä kuva linkki ongelmaani ->
http://temp4323.dy.fi/images/kuva.png
Miksi tekstuuri vääristyy noin pahoin ?
Tässä koodia ->
GL11.glViewport ( 0 , 0 , this.display_parent.getWidth ( ) , this.display_parent.getHeight ( ) ) ; GL11.glMatrixMode ( GL11.GL_PROJECTION ) ; GL11.glLoadIdentity ( ) ; float heitto = ( float ) this.display_parent.getWidth ( ) / ( float ) this.display_parent.getHeight ( ); GLU.gluOrtho2D ( -512*heitto,512*heitto,-512,512 ); GL11.glMatrixMode ( GL11.GL_MODELVIEW ) ; GL11.glLoadIdentity ( ); PeliKirjasto_Point2D p2d1 = new PeliKirjasto_Point2D ( -256,-512, 0 ); PeliKirjasto_Point2D p2d2 = new PeliKirjasto_Point2D ( 256,-512, 0 ); PeliKirjasto_Point2D p2d3 = new PeliKirjasto_Point2D ( 512, 512, 0 ); PeliKirjasto_Point2D p2d4 = new PeliKirjasto_Point2D ( -512, 512, 0 ); this.pk.pelipinta_virtuaali_syvyys = 1024; this.pk.setToIdentity3D ( ); p2d1 = this.pk.returnSpacePoint3DToScreenPoint2D ( p2d1 ); p2d2 = this.pk.returnSpacePoint3DToScreenPoint2D ( p2d2 ); p2d3 = this.pk.returnSpacePoint3DToScreenPoint2D ( p2d3 ); p2d4 = this.pk.returnSpacePoint3DToScreenPoint2D ( p2d4 ); GL11.glBindTexture ( GL11.GL_TEXTURE_2D , buffer.get ( 10 ) ) ; GL11.glBegin ( GL11.GL_QUADS ) ; GL11.glTexCoord2f ( 0 , 0 ) ; GL11.glVertex2f ( p2d1.x, p2d1.y ) ; GL11.glTexCoord2f ( 1 , 0 ) ; GL11.glVertex2f ( p2d2.x, p2d2.y ) ; GL11.glTexCoord2f ( 1 , 1 ) ; GL11.glVertex2f ( p2d3.x, p2d3.y ) ; GL11.glTexCoord2f ( 0 , 1 ) ; GL11.glVertex2f ( p2d4.x, p2d4.y ) ; GL11.glEnd ( ) ;
Miksi tekstuuri vääristyy kun vertex koordinaatit eivät ole neliön muotoisia ?
En nyt ole ihan varma, mutta eikös shakkilauta ole neliön muotoinen?
Se kulma josta sitä shakkilautaa sitten katsotaan pitäisi varmaan tuottaa muuntofunktioilla. Esimerkiksi glTranslate ja glRotate.
EDIT: eli tehdään nuo muunnokset ennen laudan piirtoa. Jotta sitten saadaan perspektiivi aikaan niin projektiomatriisin pitää olla perspekstiiviprojektion mukainen.
Teksturin vääristyminen !
Olet oikeassa, mutta, jos katselet koodia huomaat, että, olen valinnut toisenlaisen lähestymis tavan, minulla on tarkoitus laskea vertex koordinaatit itse, jotta sitten nappuloitten löytyminen olisi helpompaa hiiren avulla, kun tiedän nappien koordinaatit 2d pixeleissä näytöllä.
Miksi shakkilaudan tekstuuri vääristyy kun pyörittää, taikka kun pitää tekstuuria ei neliön muotoisena ?
Koodi siis tuossa yllä :)
Tässä vielä tuo kuva josta näkyy lopputulos tällä hetkellä -> http://temp4323.dy.fi/images/kuva.png
Pointtini oli nimenomaan se, että niitä verteksikoordinaatteja ei kannata laskea itse perspektiivin tunnun luomiseksi, vaan tehdään se perspektiivi oikeanlaisella projektiomatriisilla ja muunnosfunktioilla. Jos lasket verteksikoordinaatit itse, ei ole tietääkseni mitenkään mahdollista tehdä teksturoinnin perspektiivikorjausta, jonka puutteesta tuo vääristyminen johtuu.
Seuraava kuva varmaan havainnollistaa asiaa:
http://en.wikipedia.org/wiki/File:
Nappuloiden löytämiseen voi käyttää muitakin tekniikoita.
Voisit esimerkiksi tuplapuskurointia käyttäessäsi renderöidä värikoodatut versiot nappuloista taustapuskuriin, ja katsoa sitten hiiren kursorin kohdalla olevan pikselin värin, ja sen perusteella päätellä, mikä nappula hiiren alla on.
Sivu, josta löytyvät kuvat havainnollistavat asian mielestäni hyvin:
http://www.lighthouse3d.com/opengl/picking/
Lisää materiaalia löytyy googlettamalla "opengl picking".
Soveltamalla saat varmastikin rakennettua itsellesi sopivan ratkaisun.
3D mallinnus !
Olen päätynä käyttämään useita eri käskyjä, eri kohdin, käytän alkulogoihin ja menuihin gluperspectiveä ja sitten kun tarvitsen framen reuna tarkkuutta niin käytän gluortho2d jossa ei ole syvyyttä ollenkaan, tässä tilassa käytän sitten omaa 3d avaruutta jossa on oma syvyys vaikutelma ja jossa kaikki tekstuurit ovat nelikulmioita taikka neliöitä, asetan myös sellaisiin kohtiin jossa tuota omaa 3d avaruutta ei voi sitten käyttää, niin, erillisen tuplabufferin josta on colorpickingiä.
Nuo riittävät alkuun, kiitos keskustelusta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.