我将尝试解释我的图像问题。所以这是我用于 OpenGL 应用程序的测试纹理:
如您所见,图像周围有一个 2 像素宽的边框,具有不同的颜色,以便我能够查看在我的应用程序中是否正确设置了坐标。
我正在使用 9 单元格图案,因此我正在绘制具有特定纹理坐标的 9 个四边形。乍一看一切正常,但显示纹理有一个小问题:
在图片中,我标记了第一个四边形在哪里,第二个在哪里。如您所见,第一个显示正确,但第二个从第一个四边形的颜色平滑地变为它自己的颜色,但它应该以纯绿色和粉红色开始。所以我猜这是纹理坐标的问题。
这是它们的设置方式:
// Bottom left quad [1st quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(0.0f, 1.0);
glVertex2i(pos.x, pos.y + height);
// Top left
glTexCoord2f(0.0f, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
glEnd();
// Bottom middle quad [2nd quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
// Top left
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height);
glEnd();
您可以看到我正在使用maxTexCoordBorderX
根据边框和图像大小计算的变量。图像宽度为 32,边框宽度为 2。
maxTexCoordBorderX
= 2 / 32 = 0.0625
有人可以帮忙找出问题所在吗?