XNA:我怎么能只画一个";披萨片";我的精灵

本文关键字:quot 精灵 我的 一个 怎么能 XNA | 更新日期: 2023-09-27 18:01:03

我目前正在XNA(C#(中构建一个关于基础设施构建和管理的游戏。我目前正在努力实现的是让游戏在火车轨道之间划出"弯道"。我想通过只绘制圆形纹理的特定部分来实现这一点
换句话说,我只想画一张这种质地的"披萨片"。需要绘制的圆的切片基于三点:

  • 精灵的中心
  • 可变位置"A">
  • 可变位置"b">

这三点一起决定了我的圆圈在屏幕上画了多少,例如披萨片有多大。

简单地说:如果我有一个圆,从中心剪到一个点"a",然后再从中心剪到点"b",我怎么能只画我刚刚剪下的部分?

这个切片必须实时更改,因此根据这两个位置"a"answers"b",切片会变得越来越大。

达到这种效果的最佳方法是什么?

XNA:我怎么能只画一个";披萨片";我的精灵

这可以完全在着色器中通过相对简单的触发器完成。在您的像素着色器(效果(中,尝试以下操作:

float dX = b.x - a.x;
float dY = b.y - a.y;
float theta = Math.Atan2(dY, dX);

请注意,θ将以弧度为单位。然后检查θ是否在你的极限范围内。比如说,在0和π/2之间。如果是,则对纹理进行采样,如果不是,则返回不带alpha(透明(的float4。这应该会让你的纹理的右上角被遮住。如果你想把θ转换成度,你也可以这样做,但我建议你使用弧度,因为这会让你的数学计算更容易。

你必须用设置你的限制

effect.Parameters['thetamin']=/*minTheta*/;
effect.Parameters['thetamax']=/*maxTheta*/;

在您呼叫EffectPass.Apply()之前。