【问题标题】:How does papervision3d transform textures?papervision3d 如何转换纹理?
【发布时间】:2010-10-26 17:19:42
【问题描述】:

最终,papervision3d(流行的 Flash 3D 渲染包)如何将转换后的纹理绘制到屏幕上?

它是否在内部使用 Flash 的任何渲染设备 - 即通过将纹理绘制到 DisplayObjects 并对其进行转换,或者使用 3D MovieClips?或者也许是过滤器?或者它最终只是从纹理中读取像素并将它们绘制到输出中,就像您在任何软件平台中所做的那样?

我问是因为直截了当的答案是后一种,但经过一些测试后,getPixelsetPixel 似乎对于这种方法还不够快,所以似乎必须有什么东西更多神秘的事情发生了。

感谢您提供任何信息!

编辑 - 我对答案的总结:Papervision 本身不进行透视变换。它只会对每个纹理三角形进行缩放和倾斜变换,如果使用足够多的三角形,就会出现透视错觉。仿射变换利用了 Flash 的渲染设备,因此避免了昂贵的像素操作。

【问题讨论】:

    标签: flash actionscript-3 3d papervision3d


    【解决方案1】:

    全部使用绘图 API 渲染。 (lineTo) 使用绘图 API,您可以设置 bitmapFill ratehr 而不是颜色,这允许您绘制纹理。在内部,它们将您作为纹理传入的每个资产转换为渲染时使用的 BitmapData 对象。然后,对于您的 3D 对象具有的任何细分(三角形),它们预先对其进行转换以获得正确的视角。

    这种方法仍然非常占用处理器资源,但比设置每个像素要快。它使用专门为 ActionScript 构建的 smae 技术和理论,与其他 3D 渲染软件非常相似。

    【讨论】:

    • 非常感谢您的回复!但是你让我对“执行转换”步骤感到困惑。如果他们正在使用某种每像素进行转换,那是否仍然需要获取和设置转换后的 BitmapData 中的所有像素?或者您可以使用 DisplacementMapFilter,但您仍然必须设置地图中的每个像素。或者您的意思是使用 Flash 的渲染设备完成转换(即绘制成 MC,对其进行转换,然后再绘制回位图)?这似乎是可行的,但看起来你会被限制在仿射变换中,所以没有前景。
    • 设置 bitmapFill 时,还可以定义绘制时使用的矩阵。该矩阵将在绘制位图时对其进行转换。 (例如歪斜图像)这是磨损三角形发挥作用。一个矩形被分成两个(或更多)三角形,然后在绘制时,每个三角形的位图倾斜不同,以获得正确的透视。细分越多,预测精度就越高。
    • 啊!我现在明白了,它根本没有做任何透视变换——它正在做仿射倾斜,随着使用更多的细分,透视的错觉就会出现。知道了,非常感谢!
    猜你喜欢
    • 2012-06-02
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 2019-05-18
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    相关资源
    最近更新 更多