Flash ActionScript 3 - 绘制静态3D立方体

时间:2012-03-21 21:12:55

标签: actionscript-3 flash 3d cube perspective

我试图用一个带有消失点的Actionscript 3绘制一个10x10网格 - 所以每个方块看起来都像是朝向屏幕(每个方块都是从它自己的相对角度来看)。

我发现了很多关于3D透视立方体的教程,但它们都围绕着运动。当然,静态形状必须更容易,但我还没有找到任何关于它们的帮助。

在我的情况下,我是否有某些方法可以使用PerspectiveProjection()来解决这个问题?它看起来正是我想要的,但似乎依赖于运动。

或者还有其他3D透视对象创建方法吗? 如果可能的话,我更喜欢使用内部AS3功能。 我最接近的是这个tutorial,我可能适用于我的情况,但我想确保在尝试之前没有更简单/更清洁的方式。

感谢。

1 个答案:

答案 0 :(得分:1)

这是实现您所追求目标的最快且可能最推荐的方式:

完成此操作后,创建一个文档类并在其中粘贴我为您创建的代码,以便您入门:

package
{
    import org.papervision3d.view.BasicView;
    import org.papervision3d.objects.primitives.Cube;
    import org.papervision3d.materials.utils.MaterialsList;
    import org.papervision3d.materials.ColorMaterial;


    /**
     * Document class.
     * @author Marty Wallace.
     */
    public class Base extends BasicView
    {

        /**
         * Constructor.
         */
        public function Base()
        {

            // Create an array of faces for your cube.
            var faces:Array = [
                "front",
                "back",
                "left",
                "right",
                "top",
                "bottom"
            ];

            // Create a list of materials, which contains a material for each face of the cube.
            var list:MaterialsList = new MaterialsList();


            // Create a new material for each face.
            for each(var i:String in faces)
            {
                // Define the material.
                var material:ColorMaterial = new ColorMaterial(Math.random()*0xFFFFFF);

                // Add your material to the face represented by i.
                list.addMaterial(material, i);
            }


            // Create the Cube.
            var cube:Cube = new Cube(list, 250, 250, 250);


            // Rotate the cube to however required.
            cube.rotationX = Math.random()*360;
            cube.rotationY = Math.random()*360;
            cube.rotationZ = Math.random()*360;


            // Add the cube to the scene.
            scene.addChild(cube);


            // Render the cube.
            startRendering();

        }

    }
}

大多数代码都是非常自我解释的,并且有针对此特定框​​架的uint.MAX_VALUE教程。

享受!