好的,所以我正在纯 JavaScript 中制作 3D 渲染引擎,当然是为了挑战自己——测试我的线性代数技能。 我没有使用 WebGL,请不要说“使用 WebGL”。
无论如何,这个 软件 将接收三角形、相机和局部变换,并将数据渲染到屏幕上(我甚至让它互动起来了)。
然而,只有6行渲染代码,它们是:
// some shading and math calculations then this:
context.fillStyle = color;
context.strokeStyle = color;
context.beginPath();
context.moveTo(x0, y0);
context.lineTo(x1, y1);
context.lineTo(x2, y2);
context.lineTo(x0, y0);
context.closePath();
context.fill();
context.stroke();
虽然这样能够工作,但在我的Chromebook上使用4k+面孔时,帧率降至10fps。(普通电脑上为60fps)
无论如何,输出结果如下:
为了让它更快,并且因为画布状态的改变很慢,我去掉了描边,使渲染代码变成:
// some shading and math calculations then this:
context.fillStyle = color;
//context.strokeStyle = color;
context.beginPath();
context.moveTo(x0, y0);
context.lineTo(x1, y1);
context.lineTo(x2, y2);
context.lineTo(x0, y0);
context.closePath();
context.fill();
//context.stroke();
运行速度加倍,但呈现到屏幕上的结果是这样的:(不同的模型) 在三角形边缘处有丑陋的线条(将描边重新添加后会消失),但fps加倍,性能提升很大......
所以我认为这些线条是由于画布填充不包括它将描边绘制的区域(如你所说的轮廓)。
我尝试用数学方法修复它,虽然它能工作,但在某些极端情况下它不起作用。
因此我的问题如下: 是否有一种方法可以使上下文填充包括描边区域而不需要进行昂贵的描边操作?