Posts Tagged ‘Opensimulator’

While I was troubleshooting HG teleports a few nights ago, I stumbled onto this little gem in OS Grid.¬† There are nine regions, across 3 sims with 3 owners, an area of outer space between 900-3000m, and Aquifer caves (underground labyrinths). I haven’t even seen the outer space area or the caves yet, just this one region. The picture below is at a draw distance of 512m – I was told you need at least 512-1024 to see it best. The owner of this sim, Lani Global, and her friend Jorink Devin, were both quite friendly and helpful, and they have a freebie store with sci-fi related things, from avatars to ships to some really interesting communications devices, which the creators of these sims use to communicate with each across in 12 OSGrid sims, 2 SL sims, and one standalone opensim grid (that’s 3 different grids!)

Watch out for spice worms!


Here are the links – copy/paste only (until I can figure out how to convince WordPress that U.R.L. encompass more than http links!)

Hypergrid Link:

secondlife://hg.osgrid.org:80:Lani/113/233/34

OSGrid LM:

secondlife://Lani/113/233/34

I’m building a new house in my opensim grid…the textures are still rough, but otherwise the basement is done.

In the past, I had serious issues with using any SLERP (spherical linear interpretation) function in Opensim. In tracking the problem down, I found the culprit to be the way quaternion division is implemented in opensim:

public static Quaternion operator /(Quaternion a, Quaternion b)
{
    b.s = -b.s;
    return a * b;
}

This is multiplying the dividend by the (negative conjugate?) of the divisor. Digging into quaternions, the correct implementation should be:

public static Quaternion operator /(Quaternion a, Quaternion b)
{
    // First set b to it's own reciprocal (conjugate/(norm^2))
    b.x = -b.x;
    b.y = -b.y;
    b.z = -b.z;
    Quaternion inverseNormSquared = new Quaternion(0.0, 0.0, 0.0, 1.0/(b.x * b.x + b.y * b.y + b.z * b.z + b.s * b.s));
    b *= inverseNormSquared;

    // Now return a*(b^-1)
    return a * b;
}

I have created a patch that I use when I build opensim from source to fix this issue. It also adds unit tests for all quaternion functionality. I’m posting it here, because the Opensim project still has this in their contributions policy:

To make sure that we can accept your contribution and continue to distribute the OpenSim materials under the most free license possible, any contributions to the OpenSim project need to follow the following licensing conditions:

  • You have not studied source code from the GPL Second Life viewer or its derivatives within the last 6 months.

Didn’t Linden Lab change the licensing their viewer source code? Well, anyway, for anyone who’s interested in their quaternion division always working correctly in opensim, here’s the full patch. (HINT: If you hover your cursor over the upper-right corner of the patch on that page, a little toolbar will appear – click the left-most icon (“view source”) and a pop-up window will open, with the patch shown without any HTML formatting so it can easily be saved locally).