OpenGL ES绘制点缀圆形线圈

时间:2017-11-22 09:30:04

标签: android opengl-es

如何像这张图片一样绘制圆形线圈? 如何实现或任何建议?

不是必需的,但我想在Android上绘制它。

circular line circle

1 个答案:

答案 0 :(得分:0)

您可以通过简单地绘制彩色矩形来绘制它。创建一个绘制矩形的方法并为每个矩形调用它,或创建一个包含所有顶点数据的缓冲区并调用一次。

对于第一个程序,最简单的方法是使用矩阵。假设您在angle heightwidth处绘制了一个矩形,其中包含一个内圈radius。现在您只需要一个单一的矩形顶点缓冲区:

{
    0.0, -0.5,
    0.0, 0.5,
    1.0, -0.5,
    1.0, 0.5
}

这代表1x1立方体,它完美地定位以画线。现在使用我们想要识别的矩阵,它将在屏幕的中心绘制线条。然后将其旋转到您需要的任何角度,然后将其向前移动,使其位于内圆之外,最后将其缩放到您需要的任何尺寸:

Matrix4x4 matrix = Matrix4x4.identity // Start with identity
matrix = matrix.rotate(angle, 0, 0, 1) // Rotate around Z
matrix = matrix.translate(radius, 0, 0) // Translate it forward, this is not a bug
matrix = matrix.scale(height, width, 1.0) // Scale it

这应该是它。现在,如果你想在绘图上添加一些性能,你应该有一个绘图调用,所以你创建一个缓冲区。您仍然可以使用完全相同的过程,但是通过CPU上的目标矩阵转换原始顶点数据,然后将结果打包到数组中。

我不确定你的图像中线条的底部(内部)部分是否需要是圆形的。要实现这一点,最简单的方法是首先绘制到alpha蒙版,然后在混合中使用它。为此,您需要清除(1,1,1,1)的颜色。然后使用颜色蒙版(FALSE, FALSE, FALSE, TRUE)仅在Alpha通道上绘制一个圆,然后使用(ONE, ONE)之类的任何透明颜色混合(0,0,0,0)。这将使您的背景完全变白,但中间将有一个圆圈,零alpha。因此,现在使用(TRUE, TRUE, TRUE, TRUE)重置回默认遮罩设置,然后开始使用混合(DST_ALPHA, ONSE_MINUS_DST_ALPHA)绘制矩形。这应该很好地切割你的矩形,以在中间显示一个正确的圆。 对于同样的事情,存在一些更健壮的过程,例如绘制到模板缓冲区而不是alpha通道。