Are there any tutorials on proper use of the generator class available?

thx,

Ryan

On Tue, Jan 20, 2009 at 1:45 PM, Fabrice <[email protected]> wrote:
>
> Are you sure you are outputing a objectspace normalmap?
>
> Try the generator class, to make your normalmap.
> If it looks good, that's probably because you export your map as tangent
> normalmaps.
> the z information is used/applied another way, and I think that's what is
> happening here.
> not sure tho...
>
> note that tangent maps will be supported soon
>
> Fabrice
>
>
>
>
> On Jan 20, 2009, at 9:28 PM, zhil wrote:
>
>>
>> Hi there!
>> I have created simple application, which load normal map, simple
>> texture and shirt model, but for some reasons it looks pretty strange
>> - like if normal map was inverted for some reason (showing dark
>> instead of light and vice verse)
>>
>> Online demo here
>> http://files.rightinpoint.com/tailor_65s6d562/tailor2.html
>>
>> Source model
>> http://files.rightinpoint.com/tailor_65s6d562/shirt4.jpg
>>
>> Source code
>>
>> package {
>>        import flash.display.*;
>>        import flash.events.*;
>>        import flash.net.*;
>>        import away3d.core.*;
>>        import away3d.events.*;
>>        import fl.controls.List;
>>        import fl.data.DataProvider;
>>
>>        import away3d.core.base.*;
>>        import away3d.containers.*;
>>        import away3d.primitives.*;
>>        import away3d.materials.*;
>>        import away3d.loaders.*;
>>        import away3d.cameras.*;
>>        import away3d.core.utils.Cast;
>>        import away3d.events.*;
>>        import away3d.lights.*;
>>
>>        public class Tailor2 extends Sprite {
>>                var view:View3D;
>>                var scene:Scene3D;
>>                var camera:HoverCamera3D;
>>                var objLoader:Object3DLoader;
>>                var obj:ObjectContainer3D;
>>                var objLoader2:Object3DLoader;
>>                var obj2:ObjectContainer3D;
>>                var material:Dot3BitmapMaterial;
>>                var _loader:Loader;
>>                var _loader2:Loader;
>>                var _bitmapData:BitmapData;
>>                var light:DirectionalLight3D;
>>                var move:Boolean = false;
>>                var lastPanAngle:Number;
>>                var lastTiltAngle:Number;
>>                var lastMouseX:Number;
>>                var lastMouseY:Number;
>>
>>                var selectGroup:Sprite;
>>                var selectMiddle:List;
>>
>>                function Tailor2() {
>>                        stage.frameRate=60;
>>                        away3dcreate();
>> //                      initSelect();
>>                }
>>                function initSelect() {
>>                        selectMiddle = new List();
>>                        selectGroup.addChild(selectMiddle);
>>                }
>>                function away3dcreate():void {
>>                        scene = new Scene3D();
>>                        camera = new HoverCamera3D({zoom:3, focus:200,
>> distance:10000});
>>                        camera.targetpanangle = camera.panangle = -10;
>>                        camera.targettiltangle = camera.tiltangle = 20;
>>                        camera.yfactor = 1;
>>                        view=new
>> View3D({scene:scene,camera:camera,x:450,y:450});
>>                        addChild(view);
>>                        _loader = new Loader();
>>
>>  _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
>> onLoadTextureComplete);
>>                        _loader.load(new URLRequest("assets/t.jpg"));
>>                }
>>                function onLoadTextureComplete(e:Event):void {
>>                        trace("onLoadTextureComplete");
>>                        _bitmapData = Bitmap(_loader.content).bitmapData;
>>                        _loader2 = new Loader();
>>
>>  _loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,
>> onLoadNormalComplete);
>> //                      _loader2.load(new
>> URLRequest("assets/wp/normal.jpg"));
>>                        _loader2.load(new
>> URLRequest("assets/normal_from_Zbrush6.jpg"));
>>                }
>>                function onLoadNormalComplete(e:Event):void {
>>                        trace("onLoadNormalComplete");
>> //                      light = new DirectionalLight3D({color:0xFFFFFF,
>> ambient:0.25,
>> diffuse:0.85, specular:0.95});
>>                        light = new DirectionalLight3D({color:0xFFFFFF,
>> ambient:0.15,
>> diffuse:0.95, specular:0.95});
>>                        light.x = 10;
>>                        light.z = 1;
>>                        light.y = 1;
>>                        scene.addChild( light );
>>                        material = new
>> Dot3BitmapMaterial(_bitmapData,Bitmap
>> (_loader2.content).bitmapData,{});
>>                        //material = new
>> Dot3BitmapMaterial(Cast.bitmap(TorsoImage),
>> Cast.bitmap(TorsoNormal));
>> //                      objLoader =
>> Max3DS.load("assets/wp/men_normal_fit.3DS",
>> {material:material, ownCanvas:true, name:"torso", centerMeshes:true});
>>                        objLoader = Max3DS.load("assets/2009_01_20v2.3DS",
>> {material:material, ownCanvas:true, name:"torso", centerMeshes:true});
>>                        objLoader.addOnSuccess(objOnSuccess);
>>                        //objLoader2 =
>> Max3DS.load("assets/collar.3DS",{material:material,
>> ownCanvas:true, name:"torso", centerMeshes:true});
>>                        //objLoader2.addOnSuccess(obj2OnSuccess);
>>                }
>>                function objOnSuccess(e:Event):void {
>>                        trace("objOnSuccess");
>>                        obj = (objLoader.handle as ObjectContainer3D);
>>                        autoAdjust(obj);
>>                        view.scene.addChild(obj);
>>                        camera.lookAt(obj.position);
>>                        initListeners();
>>                }
>>                function autoAdjust(obj:ObjectContainer3D) {
>>                        trace(obj.minX);
>>                        trace(obj.maxX);
>>                        trace(obj.minY);
>>                        trace(obj.maxY);
>>                        trace(obj.minZ);
>>                        trace(obj.maxZ);
>>
>>  obj.movePivot((obj.minX+obj.maxX)/2,(obj.minY+obj.maxY)/2,(obj.minZ
>> +obj.maxZ)/2);
>>
>>  obj.scale(10000/Math.max(Math.abs(obj.minX-obj.maxX),Math.abs
>> (obj.minY-obj.maxY),Math.abs(obj.minZ-obj.maxZ)));
>>                        obj.rotationX = 90;
>>                }
>>                function initListeners():void {
>>                        addEventListener( Event.ENTER_FRAME, onEnterFrame
>> );
>>                        stage.addEventListener(MouseEvent.MOUSE_DOWN,
>> onMouseDown);
>>                        stage.addEventListener(MouseEvent.MOUSE_UP,
>> onMouseUp);
>>                }
>>
>>                /**
>>                 * Navigation and render loop
>>                 */
>>                function onEnterFrame(event:Event):void {
>>                        view.camera.moveTo(obj.x,obj.y,obj.z);
>>                        view.camera.rotationY=mouseX/2;
>>                        view.camera.rotationX=mouseY/2;
>>                        view.camera.moveBackward(5);
>>                        //obj.rotationY+=1;
>>                        view.render();
>>
>>                        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);
>>                }
>>        }
>> }
>>
>> Location of the models the same as in the source.
>>
>> Any ideas what could be the reason?
>> - problems in 3ds model (it was created in Maya, exported as obj,
>> imported into 3dmax, exported as 3ds)?
>> - problems in normal map?
>> - problems in lights settings in action script? I have played with
>> different settings, but was failed to locate reason.
>> - bug in away3d?
>>
>> Right now I dont have any ideas how I can move forward with this bug,
>> so any help are welcome.
>
>

Reply via email to