少し前まで、テクセルの中心ではなくテクスチャ座標としてテクセルのエッジを使用していたため、テクスチャの表示に問題がありました。これを線形ブレンディングと組み合わせることで、テクスチャによって与えられる純粋な色ではなく、滑らかな色の結果が得られました。
ここで私に与えられたアドバイスのおかげで、テクセルの中心を座標として使用し始めたときに問題が解決したと思いましたが、それは1つのケースでしか機能せず、その1つのケースでのみ理由がわかりません.
改めて写真をいくつか紹介します。
これは、2 ピクセルの境界線で使用しているテクスチャ (32x32 ピクセル) です。
描画されているオブジェクト全体は 9 つのクワッドで構成されていますが、使用するテクスチャは 1 つだけです (私が示したもの)。それらの1つは私の問題の説明として役立ちます:
そのクワッドの色がテクスチャによって適切に設定されていないことがよくわかると思います。
ブレンディングの問題のように見えますが、テクスチャ座標を設定するために、次のようにテクセルの中心を使用しました。
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(0.0 + texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
glVertex2i(pos.x, pos.y + height - m_borderWidth);
// Top left
glTexCoord2f(0.0 + texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);
glVertex2i(pos.x, pos.y + m_borderWidth);
// Top right
glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, (GLfloat)1.0 - maxTexCoordBorderY - texelCentersOffset);
glVertex2i(pos.x + m_borderWidth, pos.y + m_borderWidth);
// Bottom right
glTexCoord2f(maxTexCoordBorderX - texelCentersOffset, maxTexCoordBorderY + texelCentersOffset);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
glEnd();
明確にするために:
m_borderWidth
= 2
maxTexCoordBorderX
= maxTexCoordBorderY
= 2/32 = 0.0625
texelCentersOffset
= 1/64 = 0.015625
私が書いたもののどこが間違っているのか誰か教えてもらえますか?
EDIT1:
テクスチャの設定は次のとおりです。
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
GL_REPEAT );
gluBuild2DMipmaps( GL_TEXTURE_2D, 4, m_width, m_height,
GL_RGBA, GL_UNSIGNED_BYTE, pixmap );
GL_LINEAR から GL_NEAREST に変更すると、正常に動作するため、明らかにブレンディングに問題がありますが、なぜ間違っているのかまだわかりません。
EDIT2:
クワッドの高さをテクスチャの高さと同じかそれ以上に大きくすると、テクスチャ座標を変更せずに正しく機能します。