Я пытаюсь нарисовать субрегион текстуры в OpenGL, указав нужные координаты. Однако происходит то, что, в зависимости от размера изображения, кажется, что есть небольшое смещение в начале координат, где он выбирает координаты текстуры. Сумма смещения, по-видимому, меньше размера пикселя, а выход представляет собой размытую комбинацию соседних пикселей.
Вот идея того, что я описываю. В этом случае я бы хотел выбрать 6x5 зеленый/белый регион, но то, что рендеринг 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);