#1
|
|||
|
|||
Loading OSG models and orientation
Hello,
I have a question about orientation and loading OpenSceneGraph models. It seems that the OSGExp that can be downloaded from the worldviz site exports the model rotated and calls the root of the scene __VIZARD_NODE__. When loading the model, it will show correctly in vizard, but as soon as you rename this Root node, it will load the model rotated. I think this mechanism is used by Vizard to detect how the model is rotated. If it does not contain the __VIZARD_NODE__ root, it will applies a modifier so it is orientated correctly for use in Vizard. I already have a lot of models exported with another exporter. When you just load up the model it works fine, but when you change the parent of child objects, the orientation goes wrong. Here is some example code: Code:
scene = viz.add('data/testscene.ive') target = scene.getChild('Test1') target.parent(target.getParents()[0]) It this behavior a bug? Is there a workaround (without exporting all the models again)? Greetings, Joran. |
#2
|
|||
|
|||
The original OSGExp exporter uses a Z-up convention, as opposed to the Y-up convention Vizard uses. The version of the exporter available on our site will export the model using the Y-up convention and name the root node __VIZARD_NODE__. When loading a model in Vizard, if this name is not present, then it will assume the model is using a Z-up convention and insert a transform node to rotate the model into a Y-up convention.
If you detach one of the children from the parent, then the transformation won't be applied to the node, and it will go back to using a Z-up convention. Other than re-exporting your models, you could create a group node that contains the transformation from Z-up to Y-up (rotate 90 degrees along x-axis) and insert the children underneath this group node. I could also provide you with the code that is used within our exporter that converts the model from Z-up to Y-up. Using this code you can write a small program that batch converts all your models. This code was written specifically for OSGExp, so it might not work correctly on models that were exported from other programs. Let me know if you want to try this out. |
#3
|
|||
|
|||
Hello,
Quote:
Greetings, Joran. |
#4
|
|||
|
|||
When you reattach the child to the parent, you need to attach it underneath it's original parent node, or the __VIZARD_NODE__:
Code:
child.parent(model,node='__VIZARD_NODE__') |
#5
|
|||
|
|||
But doesn't the sample in the first post attach it to the original parent?
|
Thread Tools | |
Display Modes | Rate This Thread |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Collision detection with specific models | just alex | Vizard | 1 | 02-06-2009 11:02 AM |