绘制OpenGL ES纹理时,它们似乎“捕捉”到圆形像素位置,就好像绘制位置被舍入一样。即。在(x:1.1,y:5.4)绘制实际绘制(x:1,y:5)。这会导致纹理在滚动时显示为“跳跃”,而不是平滑移动。
是的,我正在为我的顶点使用浮点类型等。
绘图线等在非圆形位置下工作正常。
纹理的位置只有两个因素:
视口的翻译:
glTranslatef(viewWidth/2.0f, viewHeight/2.0f, 0.0f);
抽奖地点:
glVertexPointer(...); // see below
我正在使用以下代码绘制纹理:
glTranslatef(scrollX, scrollY, 0.0f);
...
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
// Overlay map.
glTexCoordPointer(2, GL_FLOAT, 0, textureSTs);
glBindTexture(GL_TEXTURE_2D, texture.glTtextureKeyD);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
GLfloat vertices[] = {
x1, y2,
x1, y1,
x2, y1,
x2, y2,
};
glVertexPointer(2, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
我错过了什么吗?
答案 0 :(得分:2)
您的图片上传代码最有可能使用GL_NEAREST过滤,如果您希望对中间像素值进行良好过滤,最好的选择是GL_LINEAR过滤。尝试使用glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);绑定后。使用FSAA也可以降低效果。
另一种可能性是在纹理坐标中,尝试将它们调整1/2像素。因此,如果您的纹理是256 * 256,则将.5 / 256添加到每个坐标的浮点值。
答案 1 :(得分:1)
是你的x1,y2, x1,y1, x2,y1, x2,y2,
浮动还是被截断?
设置x1,y1等的代码也是在进行除法乘法之前转换为浮点数吗?
x1 =(float)somevar * 0.5f
和你正在加入gltranslate的scrollX相同