Я пытаюсь нарисовать субрегион текстуры в OpenGL, указав нужные мне координаты. Однако происходит то, что, в зависимости от размера изображения, кажется, что в исходной точке, где он выбирает координаты текстуры, есть небольшое смещение. Величина смещения, по-видимому, меньше размера пикселя, а на выходе получается размытая комбинация соседних пикселей.
Вот идея того, что я описываю. В этом случае я бы хотел выбрать зелено-белую область 6х5, но то, что представляет OpenGL, включает в себя легкий розовый оттенок для верхнего и левого пикселей.
Как будет выглядеть вывод:
Я могу это исправить, добавив смещение к координатам текстуры перед передачей их в glTexCoordPointer, но проблема в том, что у меня нет способа вычислить, что такое смещение, и оно кажется различным для разных текстур.
псевдокод:
float uFactor = regionWidth / textureWidth; // For the example: 0.6f
float vFactor = regionHeight / textureHeight; // For the example: 0.5f
data[0].t[0] = 0.0f * uFactor;
data[0].t[1] = 0.0f * vFactor;
data[1].t[0] = 1.0f * uFactor;
data[1].t[1] = 0.0f * vFactor;
data[2].t[0] = 0.0f * uFactor;
data[2].t[1] = 1.0f * vFactor;
data[3].t[0] = 1.0f * uFactor;
data[3].t[1] = 1.0f * vFactor;
glPushMatrix();
// translate/scale/bind operations
glTexCoordPointer(2, GL_FLOAT, 0, data[0].t);