使用XNA绘制曲线

时间:2015-10-08 02:39:26

标签: xna bezier curves

我一直在我正在编写的粉丝复制游戏中取得进展,但我遇到了这个问题。 现在我在曲线路径上逐个像素地绘制纹理,但是这会在长度较长的曲线上将每秒帧数从4000减少到50。 我需要逐个像素地存储Vector2 +长度数据,所以我可以沿着它产生静态速度运动,循环通过它来绘制曲线。

我需要能够绘制的曲线是Bezier,Circular和Catmull。

enter image description here

如何提高效率?

2 个答案:

答案 0 :(得分:1)

也许我误解了这个问题,但我做了一次:

创建曲线并在其上采样x点。 (红点) 通过计算每个点的交叉向量,从中创建网格。 (绿线) 在所有这些之间构建一个四边形。所以我的照片中基本上有5个。

将U坐标设置为垂直平面,V坐标跟随曲线长度。所以在开始时为0,结尾为1。 如果你想要重复纹理,你当然可以缩放V. enter image description here

答案 1 :(得分:0)

  

如何提高效率?

假设纹理需要是动态的,请使用着色器在GPU侧绘制纹理。在CPU端绘制它不仅速度慢,而且当您需要每帧将其发送回GPU时,会使CPU和GPU陷入困境。将GPU绘制得更好。

  

我需要逐像素地存储Vector2 +长度数据

着色器可以将其他信息存储到纹理中。例如即使你可以分配一个RGBA纹理,但这并不意味着它需要存储颜色信息,因为它是你的着色器将解释数据。