我在OpenGL中绘制一个带纹理的梯形,并且会出现仿射问题:
http://upload.wikimedia.org/wikipedia/commons/5/57/Perspective_correct_texture_mapping.jpg
我希望我的纹理在透视中正确。
我必须在图片空间中插入( sw tw w )并且我不知道该怎么做:
http://i.stack.imgur.com/O0AnC.png
我粘贴了当前的代码项目:
ttp://pastebin.com/9zPZNqwr(添加http)
ttp://pastebin.com/xx1L03Si(添加http)
ttp://pastebin.com/5F2aYWx1(添加http)
我该怎么做?一些示例代码?
答案 0 :(得分:0)
最后。我发现这是一个简单的解决方案!
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();
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));
}