WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Saving as a WRL (https://forum.worldviz.com/showthread.php?t=1491)

Andrey 05-12-2008 10:21 AM

Saving as a WRL
 
Hi,

Is there any tool to save the scene created by Vizard script as a WRL file?

If there is no such a tool, then could you recommend the solution for the following problem. I know the parameters of the cylinder in Vizard: position of the bottom, position of the top, scale. How to convert them to WRML cylinder node parameters ‘translation’, rotation’ and ‘scale’?

Thank you,
Andrey

farshizzo 05-12-2008 04:42 PM

WRL files are simple text files, so you can manually generate the file. Here is an example WRL file that creates a cylinder:
Code:

Transform {
        translation 0 0.25 0
        rotation 0 1 0 0
        scale 1 1 1
        children [
                Shape {
                        geometry Cylinder { radius 0.05 height 0.5 }
                }
        ]
}

You can use Python file routines to open a file, write the contents of the wrl, and close it.

Andrey 05-13-2008 07:29 AM

Sure, no problem to generate wrl. The problem is that the translation and rotation in WRML differ from Vizard. As to translation, WRML has opposite Z direction. More difficult situation is for rotation: since I have top (p1) and bottom (p2) cylinder positions in Vizard, to get WRML rotation parameters I tried

vizmat.LookToQuat(vizmat.VectorToPoint(p1,p2))

and

vizmat.QuatToAxisAngle(vizmat.LookToQuat(vizmat.Ve ctorToPoint(p1,p2)))

but both variants produces something mysterious. Could you help?

farshizzo 05-14-2008 09:49 AM

The VRML rotation field is an axis-angle rotation. To convert a Vizard axis-angle rotation to a VRML axix-angle rotation, you will need to negate the x,y components of the axis vector and convert the degrees to radians. Here is a function that will return the VRML rotation of a cone given the bottom and top points of the cone:
Code:

def getVRMLConeRotation(bottom,top):
       
        v = viz.Vector(top)
        v -= bottom
       
        m = viz.Matrix()
        m.makeVecRotVec([0,1,0],v)
       
        r = m.getAxisAngle()
       
        return -r[0],-r[1],r[2],viz.radians(r[3])


Andrey 05-14-2008 12:08 PM

Thank you, now the result is not misterious. But when I add saved WRL back to Vizard I get the cylinder mirrored from X axis in respect to the original one. Is it because of the reverse convertion while adding?

farshizzo 05-14-2008 05:27 PM

I tested it out here and it seems to work fine. Can you provide a sample script that recreates your problem?

Andrey 05-15-2008 10:03 AM

Thank you again, I already found the bug, it works normal.


All times are GMT -7. The time now is 02:40 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC