View 3DS Modeller Med Away3D 4.0 Beta
en
Del
7
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil vi lære å laste og vise en 3DS modell fil i Flash, bruker Away3D 4.0 beta og Stage3D GPU maskinvareakselerasjon.
Endelig resultat Forhåndsvisning
La oss ta en titt på det endelige resultatet vi skal jobbe mot.
Klikk for å laste ned demofilene
Innledning
Hvis du vil bruke denne opplæringen må du ha en 3D-modell (eksporteres som en .3 ds-fil) og tekstur (som en bildefil).
Jeg laget en enkel 3D-modell av en tekanne i Autodesk 3ds Max, og eksporteres til en fil som heter Teapot.3DS Du må laste ned en pakke SWC av Away3D 4.0.0 beta (du kan også finne denne SWC i kildefilene). Og du trenger å vite at Away3D 4.0.0 beta versjonen bruker de nye Stage3D funksjonene i Adobe Flash, noe som betyr at den kan bruke GPU for 3D-grafikkakselerasjon. Vi kommer til å bygge denne demoen ved hjelp av ren AS3, utarbeidet i FlashDevelop (les mer om det her). FlashDevelop er en gratis AS3 IDE, selv om det er bare Windows. Hvis du foretrekker å bruke en annen IDE, vil du fortsatt være i stand til å følge denne opplæringen Hvis du ikke allerede har det, være Husk å laste ned og installere FlashDevelop. Åpne den og starte en ny AS3 Project. FlashDevelop vil skape en blank AS3 mal prosjekt for deg. Vi vil bruke hovedklassen for all koden vår Gå inn på Prosjekt-menyen, velg Egenskaper og endre noen alternativer: Hvis vi ønsker å kjøre denne opplæringen fra HTML-koden, må vi inkludere parameter wmode = direkte i parametrene av Flash-objekt i HTML-filen. Det vil se slik ut: I denne opplæringen vil vi laste 3DS fil fra lokal lagring (i stedet for fra en web server), så vi må endre noen innstillinger i kategorien Iler alternativer. Set Bruk Network Services Get away3d-core -fp11_4_0_0_beta.swc fra kildefilene, eller laste den ned fra Away3D nettsted. Kopier denne filen til prosjektets lib katalog. I FlashDevelop, høyreklikker du på SWC-filen, og velg Legg til i bibliotek La oss nå start koding med vår Main.as fil. For å begynne, må vi importere de nødvendige bibliotekfiler for programmet å sette opp Away3D motor og Flash-komponenter. Det er ganske mange, så la oss få dem ut av veien: La oss komme i gang. Vi vil erklære de variablene som vi kommer til å trenge, initialisere 3D-motor, og sette opp "Browse" -knappen og avlusningsinformasjon tekstfeltet I linjene 25-29, initial vi Away3D grafikk komponenter. Vi skaper en ny View3D (en container som lagrer kameraet og gjenstander), konfigurere sin objektiv og kamera, og legge den til i listen skjerm Etter at vi gjør en Browse-knappen. Vi trekke sin bakgrunn, legge etiketten, sette den opp og legge den til i listen displayet. For å gjøre det enkelt å holde styr på 3DS lastetilstand, gjør vi en debug etikett, som er en enkel tekstfeltet. Den neste viktige ting vi må gjøre er å lage en 3D-modell . loader Denne funksjonen har tre deler:. Deretter vil vi legge alle hendelsesbehandling funksjoner, som alle har noe å gjøre med å legge 3DS-fil. Når brukeren klikker på knappen Bla gjennom, viser vi Fil Bla Dialog, som bruker en Filefilter for å begrense filene som vises til de med en .3 ds forlengelse. Vi legger flere hendelsen lyttere til denne dialogen, slik at vi kan oppdage når en fil blir oppdaget, eller hvis det oppstår en feil. Etter en fil er valgt, laster vi det til FileReference eksempel at vi initialisert tidligere. Når den har lastet På denne tiden, er det to mulige tilstander vi kan fange : For å frigjøre vår hukommelse og bruke det senere, bør vi kvitte vår laster. På slutten av koden ovenfor (forutsatt at fil lastet) vi legge til en ENTER_FRAME arrangement, som vi skal bruke til å gjengi objektet. Vi skal skrive at behandleren nå Nå som alt er blitt initialisert, er vi klare til å gjengi det hele. Hver ramme, vil vi lage 3D-objektet yaw (rotere) og ringe render () funksjon av View3D å oppdatere skjermen Nesten ferdig! Kompilere SWF med F5, og se det endelige resultatet. ? Så interessant, ikke sant Du kan gjøre enn bare å rotere objektet - prøve å ringe object3d.moveFoward (10) eller object3d.pitch (1). Du kan også gjøre dette som svar på en musebevegelse eller et tastetrykk. Bare for referanse, og for å sikre at du har brukt riktig filnavn og steder for alt, her er hva din FlashDevelop prosjektet bør se som: Vi er ferdig med første grunnleggende 3D tutorial på nyeste 3d Accelarate funksjon av Adobe. Jeg hjertelig velkommen alle lesere til å komme i kontakt med meg via kommentarfeltet, eller via min nettside, helst. Takk for lesing. Ser deg neste gang. Lykke til og ha det gøy! Anmeldelser
sammen med sin egen tekstur fil, teapot.jpg
. Du kan finne både filer i kilde nedlasting.
Trinn 1:. Opprette et nytt prosjekt
Trinn 2:. Iler alternativer
< ol>
Sett målplattform til Flash Player 11.1.
Endre SWF størrelse til 550x400px.
Sett bakgrunnsfargen til svart.
Endre FPS til 40.
< object width = "550" height = "400" data = "3DViewer.swf" type = "application /x-shockwave-flash" wmode = "direkte" > < param name = "src" value = "3DViewer.swf" /> < param name = "wmode" value = "direkte" /> < /object >
til False
Trinn 3:. Legg Away3D Library
Trinn 4:. Importen
//3DS Model Viewer Tutorial //by Vu Hoang Minh - www.3dgameflash.com//Laget for active.tutsplus.com pakken {//Away3D klasser importere away3d.cameras.lenses.PerspectiveLens; import away3d.containers.ObjectContainer3D; import away3d.containers.View3D; import away3d.entities.Mesh; import away3d.events.LoaderEvent; import away3d.loaders.Loader3D; import away3d.loaders.parsers.Max3DSParser; import away3d.materials.TextureMaterial; import away3d.textures.BitmapTexture; //Generell Flash klasser for visning og interaksjon import flash.display.Bitmap; import flash.display.MovieClip; import flash.display.Shape; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Vector3D; import flash.text.TextField; //Klasser for lasting av 3DS-filen fra harddisken import flash.display.SimpleButton; import flash.events.IOErrorEvent; import flash.net.FileFilter; import flash.net.FileReference; import flash.net.URLRequest; import flash.system.Security;
Trinn 5: Initial Program
public class Hoved strekker Sprite {private Var fil. FileReference; private Var View3D: View3D; private Var loader: Loader3D; private Var labelDebug: Textfield; private Var object3d: Mesh; offentlig funksjon main (): void {//boilerplate lasting kode if (scene) init (); annet addEventListener (Event.ADDED_TO_STAGE, init); } Private funksjon init (e: Hendelses = null): void {//tillate oss å laste en lokal fil Security.allowDomain ("*"); removeEventListener (Event.ADDED_TO_STAGE, init); //init 3D-motor View3D = new View3D (); view3d.camera.lens = nye PerspectiveLens (); view3d.camera.z = 100; addChild (View3D); //3D loader initLoader (); //Knapp for å åpne filbehandleren Var mcBrowse: MovieClip = new MovieClip (); mcBrowse.graphics.beginFill (0xeeeeee); mcBrowse.graphics.drawRoundRect (1, 2, 100, 25, 7, 7); mcBrowse.graphics.endFill (); Var labelBrowse: Textfield = new Textfield (); labelBrowse.text = "Browse"; mcBrowse.addChild (labelBrowse); mcBrowse.mouseChildren = false; mcBrowse.buttonMode = true; labelBrowse.x = 25; mcBrowse.addEventListener (MouseEvent.CLICK, onClick_mcBrowse); addChild (mcBrowse); //avlusningsinformasjon labelDebug = new Textfield (); labelDebug.text = "..."; labelDebug.textColor = 0xff0000; labelDebug.selectable = false; labelDebug.y = mcBrowse.height /2; labelDebug.width = 600; addChild (labelDebug); //file file = new FileReference (); }
< p> Til slutt initial vi en FileReference eksempel å håndtere surfer for 3DS fil
Trinn 6:. Initialise 3D Loader
privat funksjon initLoader (): void {//klart alle removeEventListener (Event.ENTER_FRAME, onEnterFrame); while (view3d.scene.numChildren > 0) {view3d.scene.removeChild (view3d.scene.getChildAt (0)); } //Init ny 3D-loader Loader3D.enableParser (Max3DSParser); loader = new Loader3D (); loader.addEventListener (LoaderEvent.RESOURCE_COMPLETE, onComplete_loader); loader.addEventListener (LoaderEvent.LOAD_ERROR, onError_loader); view3d.scene.addChild (loader); //config kamera view3d.camera.lookAt (loader.position); }
Først må vi klare alt ut, i tilfelle vårt program har kjørt før
Etter at initial vi en ny Loader3D eksempel, og legge lyttere til det som utløser når det branner en feil når en 3D-fil er helt lastet. For å gjøre det synlig, vi legger det til View3D scene.
Trinn 7: Handle Alle hendelser
privat funksjon onClick_mcBrowse (e: MouseEvent): void {file.browse ([new Filefilter ("3DS", "* .3 ds")]); file.addEventListener (Event.SELECT, onFileSelected); file.addEventListener (SecurityErrorEvent.SECURITY_ERROR, onSecurityError); file.addEventListener (IOErrorEvent.IO_ERROR, onIOError); } Private funksjon onSecurityError (e: Hendelses): void {labelDebug.text + = ".Security Feil!"; } Private funksjon onIOError (e: IOErrorEvent): void {labelDebug.text + = "! .File Ikke funnet feil"; } Private funksjon onFileSelected (e: Hendelses): void {labelDebug.text = "Fil:" + file.name; file.removeEventListener (Event.SELECT, onFileSelected); file.addEventListener (Event.COMPLETE, onFileLoaded); file.load (); } Private funksjon onFileLoaded (e: Hendelses): void {file.removeEventListener (Event.COMPLETE, onFileLoaded); initLoader (); loader.loadData (e.target.data); } Private funksjon onError_loader (e: LoaderEvent): void {trace ("Feil ved lasting File ..."); labelDebug.text + = ".Loading Error"; } Private funksjon onComplete_loader (e: LoaderEvent): void {trace ("3D File loaded"); labelDebug.text + = ".Complete.Rendering ..."; loader.removeEventListener (LoaderEvent.RESOURCE_COMPLETE, onComplete_loader); loader.removeEventListener (LoaderEvent.LOAD_ERROR, onError_loader); object3d = Mesh (loader.getChildAt (0)); view3d.scene.addChild (object3d); loader.dispose (); loader = null; addEventListener (Event.ENTER_FRAME, onEnterFrame); }
, vi kaller den initLoader () funksjon som vi definerte i forrige trinn, som laster vår 3D-modell.
Den ene er "feil" tilstand, noe som innebærer at vårt program kan ikke laste 3D-modellen fil (kanskje banen er feil, eller teksturkartet filen er feil ...)
Den andre er "loaded vellykket" event, hvorpå vi kastet lastet filen til en Mesh og legge den til åstedet for View3D.
Trinn 8:. Start Render Loop
privat funksjon onEnterFrame (e: Hendelses):. Void {object3d.yaw (1); //yaw med en enhet view3d.render (); }
Trinn 9: kompilere og kjøre
Konklusjon