几天前,我开始研究有效绘制bezier曲线,我遇到了Charles Loop和Jim Blinn开发的这种方法,看起来非常有趣.然而,经过大量的算法实验,我似乎无法让它能够渲染三次曲线.Quadratics很好,没问题.
我到目前为止找到的唯一资源如下:
为了快速启动和运行测试,我在XNA中这样做.基本上我将纹理坐标与我的顶点一起传递给GPU,应用透视变换并使用像素着色器中所有文章中提到的公式来渲染最终结果.然而,问题(我认为)在于如何计算纹理坐标.检查此代码:
public void Update()
{
float a1 = Vector3.Dot(p1, Vector3.Cross(p4, p3));
float a2 = Vector3.Dot(p2, Vector3.Cross(p1, p4));
float a3 = Vector3.Dot(p3, Vector3.Cross(p2, p2));
float d1 = a1 - 2 * a2 + 3 * a3;
float d2 = -a2 + 3 * a3;
float d3 = 3 * a3;
float discr = d1 * d1 * (3 * d2 * d2 - 4 * d1 * d3);
if (discr > 0)
{
Type …Run Code Online (Sandbox Code Playgroud)