Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL纹理:不正确映射到2D多边形_Opengl_Textures_Texture Mapping - Fatal编程技术网

OpenGL纹理:不正确映射到2D多边形

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

当我尝试在2D多边形上映射纹理时,我注意到OpenGL(nVidia的卡)的一个意外行为。图像似乎被“分割”为两部分:


以下是源纹理:


简化的代码片段:

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纹理坐标,如所述,感谢链接,它似乎与相同的问题有关。