在 XNA 的另一个线程中,Callum Rogers wrote some code它创建了一个带有圆形轮廓的纹理,但我正在尝试创建一个充满颜色的圆圈。我必须对此代码进行哪些修改才能用颜色填充圆圈?
public Texture2D CreateCircle(int radius)
{
int outerRadius = radius*2 + 2; // So circle doesn't go out of bounds
Texture2D texture = new Texture2D(GraphicsDevice, outerRadius, outerRadius);
Color[] data = new Color[outerRadius * outerRadius];
// Colour the entire texture transparent first.
for (int i = 0; i < data.Length; i++)
data[i] = Color.Transparent;
// Work out the minimum step necessary using trigonometry + sine approximation.
double angleStep = 1f/radius;
for (double angle = 0; angle < Math.PI*2; angle += angleStep)
{
// Use the parametric definition of a circle: http://en.wikipedia.org/wiki/Circle#Cartesian_coordinates
int x = (int)Math.Round(radius + radius * Math.Cos(angle));
int y = (int)Math.Round(radius + radius * Math.Sin(angle));
data[y * outerRadius + x + 1] = Color.White;
}
texture.SetData(data);
return texture;
}
最佳答案
不要为这样的东西使用纹理(尤其是对于单一颜色的东西!) - 也不要尝试逐个像素地进行处理。您获得 3D 加速是有原因的。
只需使用三角扇绘制类似于饼图的圆圈即可。您将需要以下顶点。
- 圆心
- x 点在圆的边界上。
前两个点将定义圆心和圆边界之间的一条线。第三个顶点将定义第一个多边形。然后顶点 1、3 和 4 将定义第二个多边形等。
要获取圆边界上的点,请使用示例中的公式。第一个角度为 0°,后面的角度为(360°/圆上的点数)的倍数。要获得一个完整的圆圈,您需要一个额外的点来匹配第二个点(边界上的第一个点)。
根据圆上顶点的数量,您会得到不同的 n 边形。您使用的顶点越多,形状看起来就越圆(以某些性能成本为代价):
- (不能少于 2 个顶点,因为多边形至少需要绘制 3 个顶点。)
- 总共 4 个点(圆圈上有 3 个点)会形成一个三角形。
- 总共 5 个点(圆圈上有 4 个点)将形成一个正方形。
- 总共 6 个点(圆圈上有 5 个点)会形成一个五边形
- ...
实际上是XNA example for drawing primites演示如何使用三角形扇形绘制圆(或多边形)。
关于c# - XNA 画一个实心圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5641579/