2013-10-08 5 views
0

Je dessine un trapézoïde texturé en OpenGL et problème se produit affines:perspective correcte - Trapèze - 2D - OpenGL GLSL

http://upload.wikimedia.org/wikipedia/commons/5/57/Perspective_correct_texture_mapping.jpg

Je veux que ma texture cela en perspective correcte.

je dois interpoler dans l'espace d'image (sw tw w) et je ne sais pas comment le faire:

http://i.stack.imgur.com/O0AnC.png

je colle mon projet actuel de code:

  • C++:

ttp: //pastebin.com/9zPZNqwr (Ajouter http)

  • sommet:

ttp: //pastebin.com/xx1L03Si (Ajouter http)

  • fragment:

ttp: //pastebin.com/5F2aYWx1 (Ajouter http)

Comment est-ce que je peux faire ceci? Un exemple de code?

+0

http://stackoverflow.com/questions/12414708/correct-glsl-affine- texture-mapping – Jessy

+0

Votre article et cet article: http://home.xyzw.us/~cass/qcoord/ ont été d'une aide précieuse. – danicomas

Répondre

0

Enfin. Je l'ai trouvé une solution simple!

  • C++

glPushMatrix(); 
glBegin(GL_QUADS); 

float scale_texcoord = 0.7; 
float top = 0.7; 

float tx = scale_texcoord * top; 

glTexCoord2f(-1/2, -1); 
glVertex2f(-1.4, -1); 

glTexCoord4f(0, 0, 0, tx); 
glVertex2f(-top, 1); 

glTexCoord4f(tx, 0, 0, tx); 
glVertex2f(top, 1); 

glTexCoord2f(1, -1); 
glVertex2f(1.4, -1); 

glEnd(); 
glPopMatrix(); 

    fragment
  • :

uniform sampler2D sampler; 

void main() 
{ 
vec2 interpolated = vec2(gl_TexCoord[0].x/gl_TexCoord[0].w, gl_TexCoord[0].y); 

gl_FragColor = texture2D(sampler, vec2(interpolated.x, interpolated.y)); 
}