![]() |
Вопрос по Papervision3D
Вложений: 2
Возможно есть активные пользователя этого продукта.
Подскажите как можно избежать искажений когда объекты находятся близко друг к другу. Уже мучаюсь довольно долгое время с этим. Вот что я имею в виду.Вложение 19763 Вот файл swf, где можно это увидеть Вложение 19764 Вращать камеру можно стрелочками. У всех объектов разбиение на 5 сегментов. Пробовал увеличивать до 20, это не помогло а привело к снижению производительности. Еще если камеру опустить под пол, то будут видны куски объектов хотя они находятся чуть выше пола, я думаю это та же проблема. |
Прикрепи тот же пример только с wire материалом - для большей наглядности. Судя по всему нужно добавить сегментов на полу или разбить его на отдельные объекты..
|
Да, если разбить на большее число сегментов, проблема частично решается, но производительность очень низкая. Да и все равно косяки есть только мельче.
По другому никак? Или может быть какой-либо другой 3D движок решает эту проблему. |
пробуй away3d - он, вроде, круче работает с отсечением
|
Я понял в чем проблема и это не зависит от фреймворка.
У соприкасающихся объектов должны совпадать разбиения (не количество разбиений а их координаты). |
Решение одно - больше НИКОГДА не использовать papervision, только
alternativa |
Это артефакты z-сортировки, есть по-меньшей мере 2 решения: строить для сцены bsp-дерево (alternativa), но тогда придется отказаться от подвижности (можно летать камерой-смотреть, но изменять ничего нельзя), либо z-bufer, где можно менять сцену как угодно +пересекающиеся обьекты тоже отрисуются правильно, но тогда жертвуешь размерами экрана - большие битмапы flash рисует медленее вектора.
|
Еще как вариант честная z- сортировка.
|
честная z-сортировка порождает артефакты нарисованные в первом посте.
|
в первом посте изображена херня, а не честная z сортировка
|
на рисунке как раз пример классической "честной" сортировки и её артефакты, некоторые сцены с помощью сортировки правильно отрисовать невозможно.
|
Используй ViewportLayer, пол кладется в один
Код:
floorLayer = new ViewportLayer(viewport, null);и рендерим теперь по другому Код:
renderer.renderLayers(scene, camera, viewport, layersToRender); |
Спасибо!
Весьма ценная информация. |
Насчет ViewportLayer, по крайней мере раньше он был только в ветке Effects, а во всех остальных не было.
Я решал такую проблему несколько иным путем. Создавал два вьюпорта и рендерил в один подложку(в твоем случае серый Plane), а во второй все остальное, можно даже пользоваться одной сценой, только прятать ненужные обьекты перед рендером. |
Если интересует пример пиши в личку, покажу.
|
Тут есть проблема. Если камера опустится ниже уровня пола, то надо будет поменять уровни viewport, это надо как-то отслеживать как я понимаю.
Или это производится автоматически? |
Да придется отслеживать, в моем случае камера ниже пола не опускалась, в твоем слечае к сожалению остается только делить на полигоны таким образом чтобы при пересечении ребра обьектов совпадали.
Это в свою очередь накладывает ограничение, пересекающиеся обьекты трудно анимировать, так как геометрия должна изменяться. Попробуй не Papervision3D, а Away3D. В нем реализована честная z-сортировка, и он автоматически делит полигоны. В работе он несколько похож на Papervision3D(правда на более ранние версии), так как ноги у него оттуда растут. |
Народ у меня вопрос по papervision3D. Можно ли вместо текстуры использовать swf файл или несколько мувиклипов? Если можно то как писать код.
|
Цитата:
Чтобы затекстурить MovieClip-ом, используйте MovieMaterial или MovieAssetMaterial. |
Цитата:
|
TWETTI, а зачем Вы тогда в АС3 полезли? и уж тем болие в papervision3D?
|
Цитата:
|
Если ты сделал с BitmapMaterial, то в чем сложность с MovieMaterial?
Код:
var material:MovieMaterial = new MovieMaterial(sourceMovie); |
У меня все работает если я напишу:
var material:MovieAssetMaterial = new MovieAssetMaterial("myClip", false); material.doubleSided = true; material.animated= true; Но мне нужно чтобы была интеравктивность. А в MovieAssetMaterial нет интерактивности. Что делать? Я неразберусь с MovieMaterial. |
С чего ты взял, что нет интерактивности?
MovieAssetMaterial наследуется от MovieMaterial, у которого есть свойство интерактивности. Код:
material.interactive = true; |
Цитата:
Error #1056: Не удается создать свойство interactive в org.papervision3d.materials.MovieAssetMaterial. Знаешь почему? |
Видимо у тебя версия Papervision меньше 2.0
|
Да, ты прав. У меня версия 1.5. Как проверю на 2 напишу...
|
Скачал, установил я Papervision 2. Вылезла новая ошибка:
1046: Type was not found or was not a compile-time constant: Plane. Вот кусок кода там где ошибка: var contender:Sprite; var camera :Camera3D; var escena:Scene3D; var Obj3D:Plane; |
Потому что в 2.0 произошли некоторые изменения в структуре фреймворка.
В том числе изменился путь к классу Plane. Код:
import org.papervision3d.objects.primitives.Plane; |
Я хочу сделать на Papervision3D 2.0 вот это -->> http://www.metacafe.com/watch/1240319// Но там код для PV3D 1.5
Есть ли у кого есть исходник. чтобы было как в видео но написано на PV3D 2.0 |
Цитата:
И вообще, уже написан готовый фреймворк, которым ты и то не можешь воспользоваться, хотя в нем все элементарно и просто. В чем проблема написать самому? Если в недостатке навыков программирования, то здесь тебе не помогут. |
Как мне в papervision3d 1.5 сделать интерактивность? Или это невозможно?
|
|
Последний вопрос...как в papervision3d 2.0 сделать:
Код:
camera.hover(0,(200-mouseX)*.01, (200-mouseY)*.01); |
Код:
camera.orbit(pitch:Number, yaw:Number, useDegrees:Boolean = true, target:DisplayObject3D = null):void |
дайте пжста сылки где рассматриваются основные моменты работы с pv3d
|
http://tinyurl.com/8eb56s - тут есть, первая ссылка
|
| Часовой пояс GMT +4, время: 07:16. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.