我遇到了以下问题 - 我正在 OpenGL 中创建一个 GUI,我有一个可以在屏幕上拖动的 Window 组件。通常它看起来像这样:
一切都很好,除非您尝试将其向左移动以使其部分消失在视口之外 - 例如,水平滚动中的左按钮是一个单独的纹理,当我们将 Window 向左移动时,整个按钮消失,然后是第一个像素它的纹理在整个屏幕上被拉伸,像这样:
我的CBackground::draw()
方法如下所示:
bool CBackground::draw(const CPoint &pos, unsigned int width, unsigned int height)
{
if(width <= 0 || height <= 0)
return false;
GLfloat maxTexCoordWidth = (float)width/m_width;
GLfloat maxTexCoordHeight = (float)height/m_height;
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, m_texture); // Select Our Texture
switch(m_rotation)
{
case BACKGROUND_ROTATION_0_DG:
glBegin(GL_QUADS);
glTexCoord2f(0.0f, maxTexCoordHeight); glVertex2d(pos.x, pos.y + height);
glTexCoord2f(0.0f, 0.0f); glVertex2d(pos.x, pos.y);
glTexCoord2f(maxTexCoordWidth, 0.0f); glVertex2d(pos.x + width, pos.y);
glTexCoord2f(maxTexCoordWidth, maxTexCoordHeight); glVertex2d(pos.x + width, pos.y + height);
glEnd();
break;
}
glPopMatrix();
return true;
}
我之前尝试添加这样的代码glPushMatrix()
:
if((pos.x <= 0 && pos.x + width <= 0)
return false;
所以它甚至不应该绘制这个像素(我要留下一个方法return
),但它仍然会绘制这个拉伸的纹理。