【发布时间】:2011-05-16 21:02:26
【问题描述】:
我试图通过指定我想要的坐标在 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);
【问题讨论】: