Here is how I see it. But this test seams not working just how it
should be, but it is good start for playing around with. Just put this
class in document class field, it works with away3d 2.2 If you managed
to clearly understand how it works pleas let me know.
package
{
import away3d.containers.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.primitives.*;
import flash.events.*;
import flash.display.*;
import flash.geom.Matrix;
/**
* ...
* @author Alex Karmazin (NEB Group)
*/
public class AbsolutePosTest extends MovieClip
{
private var view:View3D;
private var center:Object3D;
private var testCube:Object3D;
private var controlCube:Object3D;
private var container:ObjectContainer3D;
public function AbsolutePosTest() {
super();
init3DObjects();
testSubject();
stage.addEventListener(Event.ENTER_FRAME, enterFrame);
}
private function init3DObjects() {
this.view = new View3D({x:stage.stageWidth/2,
y:stage.stageHeight/
2});
this.addChild(this.view);
center = new Cube( { x:0, y:0, z:0, width:50, height:50,
material:"red#black" } );
this.view.scene.addChild(center);
this.view.camera.position = new Number3D(0, 500, 1000);
this.view.camera.lookAt(center.position);
}
private function testSubject() {
this.container = new ObjectContainer3D( { x:0, y:0, z:0
} );
this.view.scene.addChild(this.container);
this.testCube = new Cube( { x:200, y:0, z:0, width:50,
height:50,
material:"blue#black" } );
this.controlCube = new Cube( { x:200, y:0, z:0,
width:50, height:
50, material:"green#black" } );
this.testCube.addOnMouseDown(testClick);
this.controlCube.addOnMouseDown(controlClick);
this.container.addChild(this.testCube);
this.view.scene.addChild(this.controlCube);
this.container.rotationY += 90;
}
public function testClick(e) {
trace("blue....................");
localToGlobal3D(testCube.transform);
trace("local_________________");
trace("x:"+testCube.x + " y:" + testCube.y + " z:" +
testCube.z);
}
public function controlClick(e) {
trace("green....................");
trace("global_________________");
trace("x:"+controlCube.x + " y:" + controlCube.y + "
z:" +
controlCube.z);
globalToLocal3D(controlCube.transform);
}
public function localToGlobal3D(t:Matrix3D) {
var m:Matrix3D = new Matrix3D();
m.multiply4x4(this.container.transform, t);
trace("global_________________");
trace("x:"+m.tx + " y:" + m.ty + " z:" + m.tz);
}
public function globalToLocal3D(t:Matrix3D) {
var m:Matrix3D = new Matrix3D();
m.multiply4x4(this.container.transform, t);
trace("local_________________");
trace("x:"+m.tx + " y:" + m.ty + " z:" + m.tz);
}
private function enterFrame(e:Event) {
this.view.render();
}
}
}
On Nov 27, 12:01 am, artur <[EMAIL PROTECTED]> wrote:
> Alex
>
> Thank so much for answer , can you show me and example of how use the
> second technique?
> I m not very familiarized with transform between 3dobjects. I trying
> to implement the first one but I m really interested in the second
> one.
>
> Tks in advance.
>
> Artur
>
> On Nov 26, 8:25 am, Alex Karmazin <[EMAIL PROTECTED]> wrote:
>
> > I had the same problem, so I put extra Object3D near container and
> > start rotating container. On every frame I test condition if
> > (curent.distanceTo(frontPos) < 7.5)
> > where curent is my Object3D that must be facing to the camera and
> > frontPos is "flag" Object3D that I placed in front of camera. When
> > condition triggers I use extra method to rotate container on proper
> > degree, usually it is very small, but I need exactly correct angle. So
> > for me it works perfect. Another way is to multiplying transform of
> > each container to the point coordinates and you will get absolute
> > position but I didn't use this method yet.
>
> > On Nov 26, 12:00 am, artur <[EMAIL PROTECTED]> wrote:
>
> > > Hello
>
> > > There is my problem I ll do my best to try explain it:
>
> > > I loading a 3ds in a ObjectContainer3D( BigContainer) so I rotate the
> > > container to make a 360 view, now the next step is load little 3ds
> > > pieces in littles ObjectContainer3D containers, positioning them over
> > > the bigContainer or at least that is the idea, the little ones 3ds
> > > should be look at to the normal of the point where they were added,
> > > but they are rotating in crazy ways, I tried to do a lookat camera
> > > postion but is not working, I was looking and noticed all
> > > ObjectContainer3D has his own local Coords so that would explain the
> > > weird behaviors, there is a decent way to do this?,basically put the
> > > face of my loaded models pointing to the normal of the face of the big
> > > model where was located?, I hope you can bring a light on my day
>
> > > Thanks so much in advance.
>
> > > Artur.