私の問題を画像で説明しようとします。これは、OpenGL アプリケーションに使用しているテスト テクスチャです。
ご覧のとおり、アプリケーションで座標が適切に設定されているかどうかを確認できるように、画像の周りにさまざまな色の 2 ピクセル幅の境界線があります。
私は 9 セル パターンを使用しているので、特定のテクスチャ座標で 9 つのクワッドを描画しています。一見するとすべて問題なく動作しますが、テクスチャの表示に小さな問題があります。
写真では、最初のクワッドと 2 番目のクワッドをマークしました。ご覧のとおり、1 つ目は正しく表示されていますが、2 つ目は最初の四角形の色から独自の色にスムーズに移行していますが、純粋な緑とピンクで始まる必要があります。だから私はそれがテクスチャ座標に問題があると推測しています.
設定方法は次のとおりです。
// 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
誰でも問題がどこにあるかを見つけるのを手伝ってもらえますか?