Flash ActionScript 3 - рисование статического трехмерного куба

Я пытаюсь нарисовать сетку 10x10 с помощью ActionScript 3 с точкой схода позади, чтобы каждый квадрат выглядел так, как будто он приближается к экрану (каждый в своей относительной перспективе).

Я нашел много руководств по трехмерным перспективным кубам, но все они вращаются вокруг движения. Конечно, статические формы должны быть проще, но я пока не нашел в них помощи.

Есть ли способ использовать PerspectiveProjection () в моем случае, когда это не связано с движением? Кажется, это именно то, что я хочу, но все же зависит от движения.

Или есть какие-то другие методы создания трехмерных перспективных объектов? Я бы предпочел использовать внутренние функции AS3, если это возможно. Самым близким из имеющихся у меня было руководство, которое я, вероятно, мог бы применить к своему ситуация, но я хочу убедиться, что нет более простого / чистого способа, прежде чем пытаться это сделать.

Спасибо.


person Pinch    schedule 21.03.2012    source источник
comment
В этом нет никакого смысла. Я бы предпочел использовать внутренние функции AS3, если это возможно - вся флеш-платформа основана на RUNTIME, что означает, что вы не можете писать в нее какие-либо новые функции, потому что это не открытый исходный код. Вы имеете в виду, что не хотите использовать какие-либо библиотеки AS3, такие как away3D, для ... ну ... 3D?   -  person    schedule 22.03.2012
comment
Шутки в сторону; используйте Papervision3D ... Это чрезвычайно просто, и большинство руководств научат вас визуализировать статический куб в течение первых 3 минут.   -  person Marty    schedule 22.03.2012
comment
Да, под внутренними функциями я имел в виду библиотеки AS3. Спасибо, что так бегло на это указали. Тогда я попробую одну из них, я не хотел использовать внешние библиотеки из-за того, как мало он будет использовать 3D в проекте, но это кажется лучшим способом. Ваше здоровье.   -  person Pinch    schedule 22.03.2012


Ответы (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 учебные пособия.

Наслаждаться!

person Marty    schedule 21.03.2012
comment
Единственное, что меня беспокоит сейчас во времени загрузки - это для флеш игры. Время загрузки тратится на загрузку библиотеки? (т. е. один раз), или он будет увеличиваться относительно того, чем больше я использую 3D? Подойдет ли away3dLite? (Я слышал, что это практически ветка papervision3d) или Stage 3d? Единство? - person Pinch; 22.03.2012
comment
@Pinch Самое простое, что можно сделать здесь, - это просто проверить размер SWF-файла по ходу работы. Для флеш-игры я бы нацелен на максимальный размер менее 10 МБ, если вы планируете распространять на Newgrounds, Kongregate, Mochimedia и т. Д. - person Marty; 23.03.2012
comment
Проще говоря, библиотека добавит один фрагмент данных в ваш swf и не будет добавляться дважды, например, если вы используете один и тот же код библиотеки дважды. Если библиотека хорошо написана, и вы используете только часть кода в библиотеке, компилятор сможет обойтись включением только части библиотеки. Если вы используете весь код библиотеки, это заставит его полностью включить в swf. - person aaaidan; 23.03.2012