次の問題があります-OpenGLでGUIを作成しています.画面上でドラッグできるウィンドウコンポーネントがあります。通常は次のようになります。
ビューポートの外にその一部が消えるように左に移動しようとしない限り、すべて問題ありません。たとえば、水平スクロールの左ボタンは別のテクスチャであり、ウィンドウを左に移動してボタン全体が消えると、最初のピクセルが消えます。次のように、テクスチャが画面全体に引き伸ばされています。
私の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;
そのため、この 1 つのピクセルを描画することさえできません (メソッドを で残しますreturn
) が、この引き伸ばされたテクスチャを描画します。