2012-09-25 59 views
0

我不知道什么是错的。一切似乎都很好。这里的代码(纹理加载,只是图):OpenGL - quad上的纹理坐标

glBegin(GL_QUADS); 
    float TX1,TX2,TY1,TY2; 

    TX1=some_numbers_check_below_code; 
    TX2=some_numbers_check_below_code; 
    TY1=some_numbers_check_below_code; 
    TY2=some_numbers_check_below_code; 

    glTexCoord2f(TX1,TY2); 
    glVertex3f(float(RectOutput.x), float(RectOutput.y), 0.0f); 

    glTexCoord2f(TX2,TY2); 
    glVertex3f(float(RectOutput.x+InputWidth), float(RectOutput.y), 0.0f); 

    glTexCoord2i(TX2,TY1); 
    glVertex3f(float(RectOutput.x+InputWidth), float(RectOutput.y+InputHeight), 0.0f);(InputY)/float(Input.H))); 

    glTexCoord2f(TX1,TY1); 
    glVertex3f(float(RectOutput.x), float(RectOutput.y+InputHeight), 0.0f); 

glEnd(); 

没事用:

TX1=0.0; 
TX2=1.0; 
TY1=1.0; 
TY2=0.0; 

(良好:http://i.imgur.com/xLeBm.png

,但会随(例如)破:

TX1=0.0; 
TX2=0.5; 
TY1=1.0; 
TY2=0.5; 

(喜欢这个:http://i.imgur.com/UykBh.png

真的,它让我很烦恼。可能问题不在于此代码中。一切都应该没问题......但事实并非如此。

任何想法?

+1

我不知道很多关于你正在做的,我不是专家基于OpenGL,但似乎你错过了将纹理坐标发送到平面的其中一个三角形。 –

回答

3

“我不知道什么是错的,一切似乎都很好”。太好了,不需要回答!

你应该先解释一下你期望在第二种情况下得到什么。我不是OpenGL的专家,但你的第二组坐标看起来很糟糕。

第一招:0,0 -> 1,0 -> 1,1 -> 0,1

0  1 
0 x---->x 
    |  | 
    |  | 
    |  v 
1 x<----x 

第二个:0,.5 -> .5,.5 -> .5,1 -> 0,1

0  1 
0 +-----+ 
    |  | 
    x->x | 
    | v | 
1 +--x->x 

如果要缩放纹理(但我不知道,你没有写应该是什么结果),那么这显然是错误的。

+0

感谢您的回答,但我自己修复了它。这只是愚蠢的错误glTexCoord2i insT glTexCoord2f;) – dj8000

2

哦......我觉得很蠢。对不起,需要时间。这是错误:

glTexCoord2i(TX2,TY1);

我应该使用glTexCoord2 ˚F没有 ...刚才忘了改变它...