答案 0 :(得分:0)
您可以通过简单地绘制彩色矩形来绘制它。创建一个绘制矩形的方法并为每个矩形调用它,或创建一个包含所有顶点数据的缓冲区并调用一次。
对于第一个程序,最简单的方法是使用矩阵。假设您在angle
height
和width
处绘制了一个矩形,其中包含一个内圈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通道。