Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java ja LWJGL : hassun muotoinen quad textuuri ?

kpzpt [03.12.2010 11:27:57]

#

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 ?

mikkop92 [03.12.2010 12:51:27]

#

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.

kpzpt [03.12.2010 14:42:37]

#

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

mikkop92 [03.12.2010 15:02:37]

#

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:Perspective_correct_texture_mapping.jpg

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/index.php3?color1

Lisää materiaalia löytyy googlettamalla "opengl picking".

Soveltamalla saat varmastikin rakennettua itsellesi sopivan ratkaisun.

kpzpt [03.12.2010 15:47:35]

#

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.

Vastaus

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

Tietoa sivustosta