Can't you just reverse the colors in the Normal Map? Photoshop ("inverse")

I'm not sure why it's backwards, sorry :/

On Tue, Jan 20, 2009 at 3:28 PM, zhil <[email protected]> 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.




-- 
___________________

Actionscript 3.0 Flash 3D Graphics Engine

HTTP://AWAY3D.COM

Reply via email to