To test this I'm using an OnMouseDown event on the loaded models inside their ObjectContainer3D.
I then place a "local" sphere in the ObjectContainer3D. I then place a "global" sphere in the view.scene. Here is my test code: // local sphere var sphr:Sphere = new Sphere(new ColorMaterial(0xFF00FF,0.5), 5,8,6,true); // global sphere var sphr2:Sphere = new Sphere(new ColorMaterial(0x00FF00,0.5), 2,8,6,true); // convert global mouse3D event to local var localVec3D:Vector3D = Global3DtoLocal3D(event.scenePosition,o3d); // convert it back again from local to global (test) var globalVec3D:Vector3D = Local3DtoGlobal3D(localVec3D,o3d); objcont.addChild(sphr); // (local point) sphr.x = localVec3D.x; sphr.y = localVec3D.y; sphr.z = localVec3D.z; _lastSphere = sphr; view.scene.addChild(sphr2); // green (global point) sphr2.x = globalVec3D.x; sphr2.y = globalVec3D.y; sphr2.z = globalVec3D.z; On Nov 1, 4:27 pm, mogg <[email protected]> wrote: > I wanted to share my Global3D to Local3D and > Local3D to Global3D methods I have working for Away3Dlite. > > These are working perfectly for my object tree. > > I'm using Away3Dlite trunk:Away3D/trunk/fp10/Away3DLite/src > > These two methods do assume the following object tree. > > View.scene > -ObjectContainer3D (non-mesh container for rotation help) > --Object3D (my loaded model inside the above ObjectContainer3D). > > Every model I load I first add an ObjectContainer3D to the view.scene > and then I add my loaded model into this new ObjectContainer3D. > > The purpose of the nested objects is to provide > "pitch","roll"...etc... > > Here are the methods. (please note that I had to swap the rotationZ > and rotationY AXIS in the Global3DtoLocal3D method. Not sure why but > it is the only way I was able to get this to work (a bug maybe? or I'm > just way off track and it works anyway). These work well no matter how > I seem to rotate the Outer container or the inner model itself. > > public function Local3DtoGlobal3D(localVector3D:Vector3D, > o3D:Object3D):Vector3D > { > var globalVect:Vector3D; > var parent:Object3D = o3D.parent as Object3D; > > var matrix:Matrix3D = parent.transform.matrix3D.clone(); > > globalVect = matrix.transformVector(localVector3D); > > return globalVect; > > } > > public function Global3DtoLocal3D(GlobalVector3D:Vector3D, > o3D:Object3D):Vector3D > { > var localVect:Vector3D; > var parent:Object3D = o3D.parent as Object3D; > var matrix:Matrix3D = o3D.transform.matrix3D.clone(); > matrix.appendRotation(-o3D.rotationX,Vector3D.X_AXIS); > matrix.appendRotation(-o3D.rotationZ,Vector3D.Y_AXIS); > matrix.appendRotation(-o3D.rotationY,Vector3D.Z_AXIS); > > var matrix2:Matrix3D = parent.transform.matrix3D.clone(); > > matrix.append(matrix2); > matrix.invert(); > > localVect = matrix.transformVector(GlobalVector3D); > > return localVect; > > > > }- Hide quoted text - > > - Show quoted text -
