|
|||||||
| Zarejestruj się | FAQ | Lista użytkowników | Kalendarz | Szukaj | Dzisiejsze posty | Zaznacz Wszystkie Fora jako Przeczytane |
| ActionScript 3 Programowanie w ActionScript 3 |
![]() |
|
|
Narzędzia wątku | Wygląd |
|
|
#1 |
|
wpada w rytm
Zarejestrowany: May 2005
Postów: 87
|
Witam...
Mam zaimportowany model 3d z 3DMax'a jako3ds. mam takie pytania: Model ma na sobie materialy już z 3DMax'a nie nakladam na niego zadnych w Pv3D, jak kwestia interaktywnosci na takim modelu ?? Jak kwestia nakladania materialow na model bez materialow z 3DMax'a?? Jak kwestia Shadingu na tkim modelu?? Czy są jakieś fajne silniki emulujace powiedzmy podtswowową fizykę mam na myśli tutaj grawitacje ![]() Do importu uzywam parsers.Max3DS; |
|
|
|
|
Advertisement
|
|
|
|
#2 |
|
poza kontrolą
Zarejestrowany: Sep 2008
Skąd: Poznań
Postów: 2,136
|
nie importowalem 3ds`a niegdy ale collade ale podejrzewam ze moze byc podobnie.
1. musisz pobrac materialy z obiektu, aczkowliek w tym wypadku beda to prawdopodobnie tylko materialy typu Bitmap 2. tworzysz MaterilList i wkladasz do niego wowolne materialy tylko ze musza miec ta sama nazwe c o w edytorze materialow w maxie, potem przy tworzeniu/wczytaniu obiektu podajesz ten swoj MaterialList, u ciebie bedzie load(asset:*, materials:MaterialsList = null, textureDir:String = "./image/"):void 3. dowolna, jak w pkt 2 nadpisujesz dowolny material nowym 4. tutaj nie mam doswiadczenia, ale looknij to |
|
|
|
|
|
#3 |
|
wpada w rytm
Zarejestrowany: May 2005
Postów: 87
|
Na wstępie dziękuje za odpowiedz...
Kombinuje na wszelkie sposoby - i tak... mam taki kod... Kod:
var materials:MaterialsList = new MaterialsList();
materials.addMaterial(new ColorMaterial(0xFF0000), "newMaterial");
viewport.interactive=true;
model = new Max3DS();
model.addEventListener(FileLoadEvent.LOAD_COMPLETE,modelLoaded);
Max3DS(model).load("image/gwiazda.3DS",materials, "image/");
trace("Used materials by this model: " + model.materials);
model.getMaterialByName("newMaterial").interactive = true;
model.getMaterialByName("newMaterial").addEventListener(MouseEvent.CLICK,onEClick);
Gdy object jest bez materiałów to niestety "nadpisanie" materiałów również mi nie działa bo mam teraz ColorMaterial na czerwony to tez jest... Chce uzyskac interkacje na tych objectach w zasadzie na ich materialach.. Nie bardzo juz rozumie co ja zle robie... Jeszcze mam inny problem, napisze tak przy okazji... Z racji tego ze pisze coś aby miec kilka objectow w 3D a reszta normalnie w 2D mam klase Main w ktorej tworze sobie instancje klasy objectu 3D to w sumie mam problem, z tym ze jesli doloze Tweener'a na tym objecie3D w Main to obszar widoczny sie przesuwa o skok jaki zalozylem w Tweenerze, czyli jesli x=100 i y =100 to dzieje sie tak ze obszar widzoczny o jest ograniczony od lewej i gory o 100 i w sumie to jest jasne, ale jak stowrzyc konwersje aby wszytko wspolgralo bez ograniczen. Czy jestem zmuszony pisac wszytko w jednej klasie Main gdzie mam scene i stage w tym smamym mmiejscu. Z gory dziekuje za wszelkie sugestie i pomoc, aby ominac problemy z polaczenia 2D i 3D w FLASH. Pozdrawiam |
|
|
|
|
|
#4 |
|
poza kontrolą
Zarejestrowany: Sep 2008
Skąd: Poznań
Postów: 2,136
|
nie wiem na pewno ale chyba material typu color nie moze miec listenerow, inaczej: material typu movieMaterial na pewno po ustawinie animated i interactive na true moze miec przypisany listener, ale chyba nawet nie sam material ale a movieClip ktory jest w nim.
na samych obiektach i byc moze materialch uzywa sie specjalnych event pv3d (zajzyj do dokumentacji). Pamietaj aby miec viewport.interactive = true; |
|
|
|
|
|
#5 |
|
wpada w rytm
Zarejestrowany: May 2005
Postów: 87
|
Witajcie...
Dziękuje za wszelkie sugestie, juz powywracłąem swoją klase na wszytkie chyba możliwe sposoby jakie mi przychodzą do głowy. Co chce uzyskac, wczytauje sobie bryłe z 3ds'a bez materialow i chce nalożyć( zczytac z zewnatrz bitmapMaterial), nalozyc na bryle w celu nalozenia Shadingu. Nastepnie chce na tych materialach miec podstawaowa interaktywnosc, ponizej wklejam kod wszytkich wariaci, wiec moge byc jakies bledy bo kombinuje z tym juz od kilku dni i nie jest tak jak chce, co zle robie... Kod:
package {
//import caurina.transitions.Tweener;
import flash.events.*;
import flash.display.*;
import flash.net.*;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.parsers.DAE;
import org.papervision3d.objects.parsers.Max3DS;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.shaders.FlatShader;
import org.papervision3d.materials.shaders.ShadedMaterial;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.utils.*;
import org.papervision3d.materials.special.*;
import org.papervision3d.events.*;
import org.papervision3d.materials.*;
import org.papervision3d.view.BasicView;
import org.papervision3d.objects.primitives.*;
public class Gwiazda extends BasicView
{
private var model:DisplayObject3D;
private var rotX:Number = 0.1;
private var rotY:Number = 0.1;
private var camPitch:Number = 90;
private var camYaw:Number = 270;
private var easeOut:Number = 0.1;
private var light:PointLight3D;
private var plane:Plane;
private var materialBitmap:BitmapMaterial;
public function Gwiazda()
{
//super(1003,600,true,true);
//super(640,480,false,true);
viewport.buttonMode=true;
viewport.interactive=true;
init();
startRendering();
}
private function onCompleteLoader(e:Event):void
{
var bitmap:Bitmap = e.target.content as Bitmap
materialBitmap = new BitmapMaterial(bitmap.bitmapData);
light = new PointLight3D(true);
light.z = 0;
light.y = 300;
scene.addChild(light);
var flatShader:FlatShader = new FlatShader(light,0xFFFFFF,0x000000,100)
var shadeMaterial:ShadedMaterial = new ShadedMaterial(materialBitmap,flatShader);
var materials:MaterialsList = new MaterialsList();
materials.addMaterial(shadeMaterial, "mat1");
viewport.interactive=true;
model = new Max3DS();
model.addEventListener(FileLoadEvent.LOAD_COMPLETE,modelLoaded);
Max3DS(model).load("image/Kwadrat.3DS",materials,"image/");
model.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,onClick);
model.addEventListener(MouseEvent.CLICK,onEClick);
model.scale=4;
}
private function init():void
{trace("init");
var loaderMaterial:Loader = new Loader();
loaderMaterial.contentLoaderInfo.addEventListener(Event.COMPLETE,onCompleteLoader);
loaderMaterial.load(new URLRequest("image/zielony.jpg"));
trace("init2");
}
private function onClick(e:InteractiveScene3DEvent):void
{
trace("CLICK");
}
private function onEClick(e:MouseEvent):void
{
trace("ECLICK");
}
private function modelLoaded(e:FileLoadEvent):void
{
scene.addChild(model);
trace("Used materials by this model11: " + model.materials);
//viewport.interactive=true;
model.getMaterialByName("mat1").interactive = true;
model.getMaterialByName("mat1").addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,onClick);
model.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,onClick);
}
override protected function onRenderTick(e:Event=null):void
{
var xDist:Number = mouseX - stage.stageWidth * 0.5-300;
var yDist:Number = mouseY - stage.stageHeight * 0.5
camPitch += ((yDist * rotX) - camPitch + 90) * easeOut;
camYaw += ((xDist * rotY) - camYaw + 270) * easeOut;
camera.orbit(camPitch, camYaw);
super.onRenderTick();
}
}
}
|
|
|
|