2013-10-08 42 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)); 
}