我正在尝试在其中生成一个 3D 球体的绘图,canvas
我想在其中快速渲染:我的目标是 iPad 上的小(300 像素正方形)画布的实时性能。
大多数用于任何复杂的 HTML5 渲染的演示都使用 WebGL(与 three.js 之类的),这很棒,但在 iOS 上的支持有限(实际上,目前没有,但 Apple 在技术上可以启用它)。
canvas
,但是,效果很好。
因此,我正在更加努力地构建一些基本的渲染功能,canvas
因为 CSS3 给了我 HW Transform 并且canvas
可以用于基本的纹理。我可以通过在画布上绘制来伪造照明!退了一步,因为这甚至还不是完整的硬件 T&L(DX7!...),但我仍然坚信可以构建仍然非常酷的东西。诀窍是尽可能减少几何体的数量(除其他外)。
回到手头的话题。我的实际问题非常具体。如果我想要绘制的球体离相机足够远,我可以通过它的正交投影来摆脱它。在这种情况下,我似乎可以使用弧形路径以及可用于canvas
. 这不允许我以任何方式对球体进行纹理处理,但应该会产生漂亮的平滑曲线并且看起来不错。
如果我想将透视投影投射到图片中怎么办?这种变换会产生什么样的曲线?是否有可能使用贝塞尔曲线或圆弧路径绘制足够接近的近似曲线?
我知道球体的透视投影是椭圆。椭圆可以很容易地通过缩放圆来生成。它可能就像在给定投影参数的情况下计算出该椭圆的方程一样简单。有人可以帮我解决这个问题吗?
一个对我来说总是开放的选择是忘记弧线并用线条绘制我的线框(这canvas
对我来说很方便抗锯齿),就像我们传统上这样做的方式一样,并且收工。例如,如果我想对我的球体进行纹理处理,也无法避免这种情况。