Hi Daniel,
Your 3Ds file is missing UV definitions, so away3D can only show colors on
it, and does not know how to map a bitmap to it. If you define the UV's you
should not have this problem anymore.
Best
-Peter

On Mon, Nov 23, 2009 at 8:04 AM, Daniel Griscom <[email protected]>wrote:

> I'm an Away3D beginner, developing in Flash CS4/AS3, and I'm trying to set
> up a simple movie to import and display a 3DS file. The importing works, but
> I can't get the materials to work. I just want your basic colored material
> with smooth shading, and I have this working for built-in primitives, but
> the imported only shows an unshaded solid color, with black lines for the
> edges. Strangely, the color is different each time the movie is loaded.
>
> I've posted a demo on my website at
> http://suitable.com/temp/away3d/PhongLoadedModel.html. The torus is built
> using the Torus primitive, and the cylinder is the imported 3DS file. Drag
> on the movie to navigate. Notice that the torus is properly shaded
> (including the moving light from the original Away3D demo) while the large
> cylinder is a flat color with black lines.
>
> My first guess was that there were materials specified in the imported 3DS
> file, but by tracing the Away3D import code I'm now 90+% sure that's not
> true. The other options seem to be pilot error (quite possible) or an Away3D
> bug (who knows).
>
> The code is below, or you can find the demo pieces here:
> FLA file: http://suitable.com/temp/away3d/PhongLoadedModel.fla
> 3DS file: http://suitable.com/temp/away3d/exporttest.3ds
>
> Thanks,
> Dan
>
>
> P.S. Here's the code:
>
> import away3d.cameras.*;
> import away3d.containers.*;
> import away3d.core.utils.Cast;
> import away3d.lights.*;
> import away3d.loaders.*;
> import away3d.materials.*;
> import away3d.primitives.*;
>
> //engine variables
> var scene:Scene3D;
> var camera:HoverCamera3D;
> var view:View3D;
>
> //material objects
> var material:PhongColorMaterial;
>
> //light objects
> var light1:DirectionalLight3D;
> var light2:DirectionalLight3D;
>
> //scene objects
> var max3ds:Max3DS;
> var loader:LoaderCube;
> var torus:Torus;
> var model:ObjectContainer3D;
>
> //navigation variables
> var move:Boolean = false;
> var lastPanAngle:Number;
> var lastTiltAngle:Number;
> var lastMouseX:Number;
> var lastMouseY:Number;
>
> stage.align = StageAlign.TOP_LEFT;
> stage.scaleMode = StageScaleMode.NO_SCALE;
>
> /**
>  * Global initialise function
>  */
> function init():void
> {
>        initEngine();
>        initMaterials();
>        initLights();
>        initObjects();
>        initListeners();
> }
>
> /**
>  * Initialise the engine
>  */
> function initEngine():void
> {
>        scene = new Scene3D();
>        //camera = new HoverCamera3D({focus:50, distance:1000,
> mintiltangle:0, maxtiltangle:90});
>        camera = new HoverCamera3D();
>        camera.focus = 50;
>        camera.distance = 1000;
>        camera.mintiltangle = -80;
>        camera.maxtiltangle = 80;
>
>        camera.targetpanangle = camera.panangle = 45;
>        camera.targettiltangle = camera.tiltangle = 20;
>
>        //view = new View3D({scene:scene, camera:camera});
>        view = new View3D();
>        view.scene = scene;
>        view.camera = camera;
>
>        addChild(view);
> }
>
> /**
>  * Initialise the materials
>  */
> function initMaterials():void
> {
>        material = new PhongColorMaterial(0x808080);
>        material.shininess = 20;
>        material.specular = 0.4;
> }
>
> /**
>  * Initialise the lights
>  */
> function initLights():void
> {
>        //light1 = new DirectionalLight3D({y:1, ambient:0.1, diffuse:0.7});
>        light1 = new DirectionalLight3D();
>        light1.y = 1;
>        light1.ambient = 0.1;
>        light1.diffuse = 0.7;
>
>        scene.addChild(light1);
>
>        //light2 = new DirectionalLight3D({y:1, color:0x00FFFF, ambient:0.1,
> diffuse:0.7});
>        light2 = new DirectionalLight3D();
>        light2.y = 1;
>        light2.color = 0x00FFFF;
>        light2.ambient = 0.1;
>        light2.diffuse = 0.7;
>
>        scene.addChild(light2);
> }
>
> /**
>  * Initialise the scene objects
>  */
> function initObjects():void {
>
>        max3ds = new Max3DS();
>        max3ds.centerMeshes = true;
>        max3ds.material = material;
>        loader = new LoaderCube();
>        loader.loadersize = 200;
>        loader.ownCanvas = true;
>        loader.addOnSuccess(onSuccess);
>        loader.loadGeometry("exporttest.3ds", max3ds);
>
>        scene.addChild(loader);
>
>        torus = new Torus();
>        torus.ownCanvas = true;
>        torus.material = material;
>        torus.radius = 150;
>        torus.tube = 60;
>        torus.x = 500;
>        torus.segmentsR = 12;
>        torus.segmentsT = 10;
>
>        scene.addChild(torus);
>
> }
>
> /**
>  * Listener function for loading complete event on loader
>  */
> function onSuccess(event:Event):void
> {
>        model = loader.handle as ObjectContainer3D;
>        model.scale(100);
>        model.rotationX = 90;
> }
>
> /**
>  * Initialise the listeners
>  */
> function initListeners():void
> {
>        addEventListener(Event.ENTER_FRAME, onEnterFrame);
>        stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
>        stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
>        stage.addEventListener(Event.RESIZE, onResize);
>        onResize();
> }
>
> /**
>  * Navigation and render loop
>  */
> function onEnterFrame(event:Event):void
> {
>        tick(getTimer());
>
>        if (move) {
>                camera.targetpanangle = 0.3*(stage.mouseX - lastMouseX) +
> lastPanAngle;
>                camera.targettiltangle = 0.3*(stage.mouseY - lastMouseY) +
> lastTiltAngle;
>        }
>
>        camera.hover();
>        view.render();
> }
>
> /**
>  * Mouse down listener for navigation
>  */
> function onMouseDown(event:MouseEvent):void
> {
>        lastPanAngle = camera.targetpanangle;
>        lastTiltAngle = camera.targettiltangle;
>        lastMouseX = stage.mouseX;
>        lastMouseY = stage.mouseY;
>        move = true;
>        stage.addEventListener(Event.MOUSE_LEAVE, onStageMouseLeave);
> }
>
> /**
>  * Mouse up listener for navigation
>  */
> function onMouseUp(event:MouseEvent):void
> {
>        move = false;
>        stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave);
> }
>
> /**
>  * Mouse stage leave listener for navigation
>  */
> function onStageMouseLeave(event:Event):void
> {
>        move = false;
>        stage.removeEventListener(Event.MOUSE_LEAVE, onStageMouseLeave);
> }
>
> /**
>  * Stage listener for resize events
>  */
> function onResize(event:Event = null):void
> {
>        view.x = stage.stageWidth / 2;
>        view.y = stage.stageHeight / 2;
> }
>
> /**
> * Updates every frame
> */
> function tick(time:int):void
> {
>        light1.x = Math.cos(time/2000);
>        light1.z = Math.sin(time/2000);
> }
>
> init();
>
> stop();
>
> --
> Daniel T. Griscom             [email protected]
> Suitable Systems              http://www.suitable.com/
> 1 Centre Street, Suite 204    (781) 665-0053
> Wakefield, MA  01880-2400
>



-- 
___________________

Actionscript 3.0 Flash 3D Graphics Engine

HTTP://AWAY3D.COM

Reply via email to