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 ,那么我可以看到所有边)。请你解释一下,为什么我看不到所有的侧面?

4

1 回答 1

0

原因是四舍五入的值。呈现屏幕边框的值不是呈现特定像素,而是呈现像素之间的值。对于您的具体情况,您似乎已经使用“正交”方法在区间 [-1, 1] 上定义边界。想象一下您的视图仅包含 4 个 2x2 像素:在这种情况下,您仍然在区间 [-1, 1] 上定义了边框,但实际像素位置为(-.5, -.5), (-.5, .5), (.5, -.5), (.5, .5). 现在,在绘制代表边框的线条时考虑的所有因素都将只填充 3 个像素(2 行)。它们中的哪一个将被填充取决于将 0.5 浮点值舍入为整数值:如果 0.5 舍入为 1,您可以期望填充左上部分,在其他情况下填充底部和右侧(注意术语“左、右,up,down" 取决于内部缓冲区结构,

因此,要使用线条填充正确的像素,您需要这样的东西(仅限左侧):

-1 + (2/bufferWidth)*.5

分解它:-1 是边界值;2 是在您的“正交”(右 - 左)中定义的间隔宽度;bufferWidth 表示像素数;(2/bufferWidth) 是像素宽度;.5 得到像素的中心。

要在您的情况下解决此问题,只需将线宽设置为 1.5 就足够了。

于 2013-07-15T09:25:32.053 回答