OpenGL纹理:不正确映射到2D多边形
当我尝试在2D多边形上映射纹理时,我注意到OpenGL(nVidia的卡)的一个意外行为。图像似乎被“分割”为两部分: 。OpenGL纹理:不正确映射到2D多边形,opengl,textures,texture-mapping,Opengl,Textures,Texture Mapping,当我尝试在2D多边形上映射纹理时,我注意到OpenGL(nVidia的卡)的一个意外行为。图像似乎被“分割”为两部分: 。 以下是源纹理: 简化的代码片段: GLuint textId; glGenTextures( 1, &textId ); glBindTexture( GL_TEXTURE_2D, textId ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParamet
以下是源纹理:
简化的代码片段:
GLuint textId;
glGenTextures( 1, &textId );
glBindTexture( GL_TEXTURE_2D, textId );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, img.width(), img.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, (void*)img.bits() );
glEnable( GL_TEXTURE_2D );
glBegin( GL_TRIANGLE_FAN ); // the same effect for GL_QUADS
glTexCoord2d( 0.0, 0.0 );
glVertex2d( -0.5, -0.3 );
glTexCoord2d( 1.0, 0.0 );
glVertex2d( 0.5, -0.8 );
glTexCoord2d( 1.0, 1.0 );
glVertex2d( 0.5, 0.8 );
glTexCoord2d( 0.0, 1.0 );
glVertex2d( -0.5, 0.3 );
glEnd();
产生这种奇怪效果的原因是什么?我希望看到我的纹理从左到右变宽,白线保持平行。这是因为纹理坐标沿对角线线性插值。事实上,你对此无能为力。可以使用与形状匹配的纹理(即梯形)。或者你可以试试双线性插值。但这需要一个特殊的着色器。为了减少问题,您可以细分四边形并在对角线处指定正确的纹理坐标。您可以使用4d纹理坐标,如所述,感谢链接,它似乎与相同的问题有关。