Jump to content
View in the app

A better way to browse. Learn more.

Tinkerunity

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Geschrieben

Hi everybody,

 

Could somebody guide me how to save/count the orientation of the IMU Brick? Similarly to how brickv does it. I am trying to reproduce the same example with the 3D model with JS/Away3D/Actionscript. Seems to work "alright" not counting that my 3D models have different initial orientation so basically everything works the other way around (moving the brick left turns the object right, etc).

I am retrieving the quaternions periodically and then pass them to flash where I convert them to a transformation 3D matrix and apply it to the models.

Thanks in advance!

Geschrieben
  • Autor

Oh nice, thanks for that! However, still no go. I can save the position but the rotation is just broken. I guess the problem lies with the coordinate system. You are using a positive Z towards the user, is that correct? While Away3D has the positive Z facing away from the user.

 

Unfortunately I have very few knowledge about these things (shame on me!), but I assume this would completely break the rotation. Is that so? Any hint/advance how to fix it?

 

Edit:

Here is how I am solving it:

private function saveOrientation():void {
var quatString:String = ExternalInterface.call("getQuaternionString"); //from JS in format "x,y,z,w"
var quatArray:Array = quatString.split(",");
_relX = -quatArray[0];
_relY = -quatArray[1];
_relZ = quatArray[2];
_relW = quatArray[3];
}

And then upon update I use:

var quatString:String = ExternalInterface.call("getQuaternionString"); //from JS in format "x,y,z,w"
var quatArray:Array = quatString.split(",");
var x:Number = -quatArray[0];
var y:Number = -quatArray[1];
var z:Number = quatArray[2];
var w:Number = -quatArray[3]; //there is a minus here, why?

I have absolutely NO idea whether this is correct but it seems to work with a test cube. Is this approach at least remotely correct?

 

All the rest of the calculation is from the example you showed me I am just not inverting the final transformation matrix (AS3: Matrix3D objects can be initialized with a Vector of 16 Numbers, where every four elements is a column.)

Geschrieben

I don't know Away3D, so i can't help you, sorry. But of course they can use a different coordinate system than we. If it works with the changes you did it probably only means that the positive facing direction of some of the axis is different, which shouldn't be a problem (i.e. you probably did the right thing).

  • 2 weeks later...
Geschrieben
  • Autor

Well, you are right, if it works, there is nothing to solve. :) Thanks for your assistance.

 

One last question - any example/hint of how to smooth the quaternion values so I could eliminate the shakiness? Thanks a lot.

Geschrieben
  • Autor

Jeez, that's it. Very nice, thanks a lot!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.