不完全确定这是否应该属于 Stack Overflow,但这里是。
我正在使用 HTML5 <canvas>
创建 3D 井字游戏的简单版本目的。第一个玩家使用十字符号,而第二个玩家使用圆形符号。关键是我不知道如何透视圆形。
目前,我使用的方法是创建一个具有尽可能多角度(但在一定程度上)的正多边形,通过在这些点之间绘制直线来伪造一个圆。我使用正弦/余弦计算了这些点(角度)的坐标。
使用 6 个角度:
使用 50 个角度(看起来足够像一个圆):
这很有效,但是需要相当多的点才能很好地伪造一个圆。而且,如果我创造一个球,我就会遇到更多麻烦。例如,维基百科上的图片显示,即使有很多点,它仍然会有一个相当“ block 状”的表面:http://en.wikipedia.org/wiki/File:Sphere_wireframe.svg
我想知道是否有任何方法可以更有效地透视圆形,也许不需要点,以便能够以更实用的方式创建逼真的圆形形状。
预先感谢您的任何建议。
最佳答案
圆的多边形近似是实用的方法。计算坐标并对它们应用透视变换非常简单。您可能应该坚持该解决方案。
也就是说,如果您对数学感兴趣,那么您正在考虑的兔子洞非常酷。事实证明,所有二次曲面(包括球体和椭圆形)都可以用 4x4 矩阵表示。不仅如此,一旦转换为 4x4,您就可以应用所有标准 4x4 变换矩阵(这不仅仅是乘法)。 IIRC 你甚至可以对它们应用透视变换,结果仍然是二次曲面。现在,这对您处理 3D 世界中的 2D 形状并没有多大帮助。但是,由于圆是圆柱体和平面的交集,并且两者都可以变换,因此应该有一个解决方案可以解决您的问题。
Here is a link describing the representation and transformations of quadrics
正如您所展示的,地面上圆的透视投影通常是屏幕空间中的旋转椭圆。我没有转换方法,但我相信存在一种转换方法,并且比您现在所拥有的更复杂。
关于math - 透视圆形形状的实用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4900523/