我需要使用4个点来绘制一张图片。这4个点已经存储在一个数组中,这些位置是变化的。现在我需要绘制一张反映这些位置的图片。然而,context.drawImage只接受一个位置。
应该像这样,有4个位置:
x,y----------x,y
| |
| |
| |
| |
| |
x,y----------x,y
我需要使用4个点来绘制一张图片。这4个点已经存储在一个数组中,这些位置是变化的。现在我需要绘制一张反映这些位置的图片。然而,context.drawImage只接受一个位置。
应该像这样,有4个位置:
x,y----------x,y
| |
| |
| |
| |
| |
x,y----------x,y
你想要将一个矩形图像呈现到可能不规则的四边形中。
正确的方法是计算变换矩阵,无需呈现真正的3D内容。这是通过计算单应性矩阵来完成的。为此,您需要了解转换矩阵并实现一些代码以解决一些方程。
这个过程已经被很好地理解,并且需要原始的四个坐标和目标的四个点,您已经拥有它们,所以您只需要一个计算变换矩阵的过程。这个矩阵基本上是通过高斯-约旦消元计算出来的。
请查看矩阵求解器和常规程序。一旦您了解了转换,就可以轻松完成它。还可以查看这个以了解什么是单应性。以及这里解释了如何计算,并提供了JavaScript和CSS的示例。
这里有一个很棒的演示,包括源代码和说明。
<canvas>
作为渲染引擎。由于问题不是那么简单,我建议你使用Three.js或类似的封装器,它提供了高级抽象,用于纹理化面操作。查看其他Three.js 2D <canvas>
示例,你就能明白它是如何工作的。