2013-10-08 21 views
0

我画在OpenGL纹理的梯形,发生仿射问题:视角的正确 - 梯形 - 2D - OpenGL的GLSL

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

我希望我的纹理从整体来看,是正确的。

我必须在图像空间插值SW TWW¯¯),我不知道如何做到这一点:

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

我贴我当前的代码项目:

  • C++:

TTP://pastebin.com/9zPZNqwr(添加HTTP)

  • 顶点:

TTP://pastebin.com/xx1L03Si(添加HTTP)

  • 片段:

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

我该怎么做?一些示例代码?

+0

http://stackoverflow.com/questions/12414708/correct-glsl-affine-纹理映射 – Jessy

+0

您的文章和这篇文章:http://home.xyzw.us/~cass/qcoord/一直很好的帮助。 – danicomas

回答

0

最后。我发现它很简单!

  • 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(); 

  • 片段:

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)); 
}