Как я могу загрузить приложение Papervision / Flex (SWF) в качестве материала на плоскость Papervision?

Я пытаюсь создать приложение-портфолио, подобное тому, которое используется в Whitevoid. Я использую Flex 4 и Papervision3D 2. У меня все работает, кроме одной проблемы. Когда я пытаюсь загрузить внешний SWF в качестве материала на одну из плоскостей, я вижу все собственные компоненты Flex или Flash в их правильных положениях, но объекты papervision не отображаются должным образом. Похоже, что область просмотра не устанавливается во вложенном SWF. Я разместил свой код для загрузки SWF ниже.

private function loadMovie(path:String=""):void
{
    loader = new Loader();
    request = new URLRequest(path);

    loader.contentLoaderInfo.addEventListener(Event.INIT, addMaterial);

    loader.load(request);
}

private function addMaterial(e:Event):void
{
    movie = new MovieClip();
    movie.addChild(e.target.content);
    var width:Number = 0;
    var height:Number = 0;
    width = loader.contentLoaderInfo.width;
    height = loader.contentLoaderInfo.height;

    //calculate the aspect ratio of the swf
    var matAR:Number = width/height;

    if (matAR > aspectRatio)
    {
        plane.scaleY = aspectRatio / matAR;
    }
    else if (matAR < aspectRatio)
    {
        plane.scaleX = matAR / aspectRatio;
    }

    var mat:MovieMaterial = new MovieMaterial(movie, false, true, false, new Rectangle(0, 0, width, height));

    mat.interactive = true;
    mat.smooth = true;
    plane.material = mat;
}

Ниже я разместил две картинки. Первый - это снимок приложения, работающего само по себе. Второй - это приложение как MovieMaterial на плоскости. Вы можете видеть, как кнопка, созданная как объект искры в mxml, остается в правильном положении, но сфера papervision (которая вращается) находится в неправильном месте. Что-то мне здесь не хватает?

СфераСамолет


person Ryan R.    schedule 24.03.2011    source источник


Ответы (1)


Мужчина. Я давно не видел этот сайт. По-прежнему один из самых крутых фотоэлектрических проектов ...

Что вы подразумеваете под:

Я не могу должным образом увидеть сцену, отрисованную в Papervision

Вы говорите, что можете видеть компоненты в их соответствующих положениях, например: у вас есть самолет, на котором загружается предполагаемый файл? Но я предполагаю, что вы не можете с ним взаимодействовать.

Насколько мне известно, и я потратил разумное количество времени, пытаясь сделать что-то похожее, MovieMaterial (который, как я полагаю, вы используете) рисует Bitmap любого содержимого, существующего в вашем MovieClip, и если вы установите его на animated = true, тогда он будет отображать серию растровых изображений, что эквивалентно анимации. Чего он не делает, так это отображения фактического MovieClip (или SWF) на плоскости. Итак, вы можете видеть свои компоненты, но вот как:

MovieMaterial.as строка 137

// ______________________________________________________________________ CREATE BITMAP

        /**
        * 
        * @param    asset
        * @return
        */
        protected function createBitmapFromSprite( asset:DisplayObject ):BitmapData
        {
            // Set the new movie reference
            movie = asset;

            // initialize the bitmap since it's new
            initBitmap( movie );

            // Draw
            drawBitmap();

            // Call super.createBitmap to centralize the bitmap specific code.
            // Here only MovieClip specific code, all bitmap code (maxUVs, AUTO_MIP_MAP, correctBitmap) in BitmapMaterial.
            bitmap = super.createBitmap( bitmap );

            return bitmap;
        }

Обратите внимание, что в WhiteVoid вы фактически никогда не взаимодействуете с фильмом, пока он не «приземлится» = он, скорее всего, меняет местами фильм поверх плоскости с растровой текстурой.

Часть, с которой вы взаимодействуете, вероятно, является другой плоскостью, на которой находится «кнопка», которая просто становится видимой при наведении курсора мыши.

Я думаю, что PV1.0 имел доступ к реальным SWF-файлам в качестве материала, но это изменилось в 2.0. Грустно. Надеюсь, Molehill это сделает.

ваше здоровье

person Bosworth99    schedule 24.03.2011
comment
Я добавил для вас больше информации, а также пример. Я могу нормально взаимодействовать с кнопкой и вижу, как вращается сфера. Это просто неправильное масштабирование или изменение положения сферы. - person Ryan R.; 24.03.2011
comment
какую версию PV вы используете? Интересно, что у вас это работает, у меня была точно такая же настройка, без всякой радости ... Так что в любом случае - контент отображается, но неправильно выровнен. Так что проверьте опору Viewport.autoScaleToStage. По умолчанию установлено значение false, поэтому попробуйте true. В качестве альтернативы, у вас установлен stageScaleMode / stageAlign в swf? Выравнивание по TOP_LEFT также может решить эту проблему. - person Bosworth99; 24.03.2011
comment
Я использую последнюю версию - 2.1.932. Я пробовал масштабировать в обоих направлениях, но, похоже, ничего не вышло. Я просто оставил режим масштабирования и выровнял значения по умолчанию. Я хотел бы иметь возможность взять swf, созданный другим разработчиком / группой, и использовать его независимо от этих настроек. Мои самолеты очень маленькие, всего пара сотен пикселей в обоих направлениях, так что я думаю, что это просто минимум. Я как бы надеялся, что встроенный SWF-файл будет использовать плоскость в качестве сцены вместо браузера, и встроенная сцена будет масштабироваться по плоскости. - person Ryan R.; 24.03.2011
comment
Хммм .. Сомневаюсь, что есть какой-то минимум. Это определенно похоже на то, что происходит - вместо того, чтобы использовать плоскость в качестве сцены, загруженный swf использует родительский этап. Движется ли сфера в масштабе родительского контейнера? сложно сказать. Какое-то странное взаимодействие stageScaleModes и вложенных этапов ... Вы можете попробовать уменьшить масштаб загруженного фильма, чтобы он соответствовал размеру плоскости, к которой вы его применяете, а не наоборот. - person Bosworth99; 24.03.2011
comment
Сфера остается в том же положении и масштабируется вместе с плоскостью даже при движении и когда я изменяю размер всего окна. Если вы масштабируете фильм перед добавлением его к материалу, он просто растягивает его, чтобы соответствовать плоскости. Возможно, я ошибаюсь, но похоже, что применение материала всегда заполняет всю плоскость. - person Ryan R.; 24.03.2011
comment
Ага. Растровое изображение / фильм должно растянуться, чтобы соответствовать размерам плоскости. Итак - вы масштабировали родительский фильм? как насчет дочернего фильма (загруженного swf)? Я имел в виду сохранить родительский MovieClip на 100% и изменить дочерний (хотя, возможно, это было то, что вы сделали). Как бы то ни было, проблема, похоже, в том, что сцена PV сохраняет свое собственное разрешение вместо масштабирования в соответствии с ее контейнером (плоскостью) - вот почему я подумал об autoStageScaleMode. Извините, я здесь не очень полезен ... PV имеет тенденцию быть привередливым. Я, наверное, не догадываюсь без проекта в руках, с которым можно было бы повозиться ... - person Bosworth99; 24.03.2011