在OpenGLES 2.0中绘制具有分辨率尺寸的框架

时间:2013-07-14 15:50:29

标签: opengl-es-2.0

我想通过在OpenGLES 2.0模拟器(在PC上)绘制具有分辨率尺寸的框架并查看绘制的框架来检查我的分辨率。 我在这些坐标上绘制了一个line_strip:

-1.0f, 1.0f, 0.0f,
-1.0f,  -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, 1.0f, 0.0f,

通过这个功能:

glDrawArrays ( GL_LINE_STRIP, 0, 5 );

我只看到右侧和上侧,并且看不到左侧和下侧。看起来它们不在屏幕之外(如果我画的这些边不是-1.0f,而是高一点,即-1.0f + 1 / screen_width,那么我可以看到所有的边)。 你能解释一下,为什么我看不到所有方面?

1 个答案:

答案 0 :(得分:0)

原因是四舍五入。呈现屏幕边框的值不呈现特定像素,而是呈现像素之间的值。对于您的具体情况,您似乎使用“ortho”方法在区间[-1,1]上定义边界。想象一下,您的视图仅由4像素组成2x2:在这种情况下,您仍然在区间[-1,1]上定义边框,但实际像素位置将为(-.5, -.5), (-.5, .5), (.5, -.5), (.5, .5)。现在,当绘制代表边框的线时,所有事情都会被考虑,你只需要填充3个像素(2行)。它们中的哪一个将被填充取决于将.5浮动值四舍五入为整数值:如果.5舍入为1,则可以预期左上部分被填充,在其他情况下为底部和右侧(注意术语“左,右” ,up,down“取决于内部缓冲结构,而不是你在显示器上看到的内容。”

所以要用线条填充正确的像素,你需要这样的东西(仅限左侧部分):

-1 + (2/bufferWidth)*.5

将其分解:-1是边界值; 2是你的“ortho”(右 - 左)中定义的间隔宽度; bufferWidth表示像素数; (2 / bufferWidth)是像素宽度; .5获得像素的中心。

要解决此问题,只需将线宽设置为1.5即可。

相关问题