Tuesday, 5 June 2012

Secondlife

Second Life Virtual Library

Avatar:dson391




Design Process

First trial 
We began to build this structure, 5 by 10 m base floor, which was influenced from our journals overall. Most of our journals were solid, linear and tall buildings. 
We used simple geometry shapes to start off with and made  complex  geometry shapes by   copy and pasting them to make a wall. However, it looked to bulky, so we decided to make some triangles smaller than the other.
We inserted texture to emphasize which material is used in the structure.
Shapes and textures were influenced from journal: AI Architecture Ideas, Acktuell.
These two journals are based on textures, shape, forms and materials.

Building with only flat geometry shapes seemed boring and  safe. So  we added  warmed coloured prim in different lengths and width. 

Glass lid on top so people can walk on it.

We toned down the colours and changed materials  of the prim.

 Tidied the triangle wall at the front and added clear transparent walls and waterfall on one side connecting to slanted roof which coincidentally with the book case stairs.


This is a close up of roof and what it looks like from the back view. The building overall is dark to make the bookcase stairs stand out.
Add caption



Second trial


Before we went any further on this project, We thought about the link and the relationship between journals and the library. 
We wanted more elegant and smooth edged structure.
First thing we changed was the shape of the floor to a semi sphere. and round stairs going up  to  three floors





Jiwon's jounral : Home New Zealand
we were influenced by this photograph at first, but it looked to messy and  complex with no meaning and it looked like a beehive.







Third trial 


(deleted everything and started from scratch got influence from journals)


                 



These are images of trials of a rotating wall shape. We started from the beginning, knowing roughly what to do.



Final design elements and processes





 

 

This moon is for night time, where people can rest and read books
The top floor is shaped like a dorm. The wall is transparent and so people can enjoy night views as well.
Script is used here. So when you want to go out, you write a command 'level 4 close' if you want to open 'level 4'



One way to access the building is to go up to the door beside the triangle, and write commend,  'open' and it opens with journals on the other side. Leave it, and it will go back to its place. When you go in, from the other side looking at the triangle wall, and write command 'journals' and it will open a texture of journals (our own textures)



Fish pond












My alpha channels








Final design







I experimented dramatic setting of background to show various colours the library can be looked at.

blogs on wall used as texture and computer screen. 








  





Scratch 4SL

                                 




  • These are scripts applied in the virtual library to show motion, sound, teleportation etc. 


//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/ The script begins _/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
vector destination = <22.860,156.773,48.387>; // the destination coordinate
string text = "Touch To Teleport to first floor"; // optional floating text on the teleporter, input a space if not used
vector text_color = <1.0,1.0,1.0>; // the floating text's color
integer touch2sit = TRUE; // TRUE - left click to sit; FALSE - left click to touch
integer access_mode = 1; // 1 - public; 2 - owner; 3 - group;

//=================================================
posJump( vector target_position )
{// Trickery discovered by Uchi Desmoulins and Gonta Maltz. More exact value provided by Fake Fitzgerald.
    llSetPrimitiveParams([PRIM_POSITION, <1.304382E+19, 1.304382E+19, 0.0>, PRIM_POSITION, target_position ]);
}
//=================================================
warpPos( vector destpos )
{   //R&D by Keknehv Psaltery, 05/25/2006; unlimited modified by Klug Kuhn 10/01/2008

    // Change this safety range depends on your script memory
    // The larger the range, the quicker (and less "flashes") to get to the destination, however, the more to eat up script memory.
    float safety_range = 1000.0;


    integer arrived = FALSE;
    integer within_range = FALSE;
    vector inter_pos = ZERO_VECTOR;
    vector current_pos = llGetPos();
    vector checking_pos = destpos;
    integer jumps = 0;
    list rules = [];
    integer count = 0;

    if (llVecDist(destpos, current_pos) <= safety_range)
    {
        jumps = (integer)(llVecDist(destpos, current_pos) / 10.0) + 1;
        rules = [ PRIM_POSITION, destpos ];  //The start for the rules list
        count = 1;
        while ( ( count = count << 1 ) < jumps)
            rules = (rules=[]) + rules + rules;   //should tighten memory use.
        llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );           
    }
    else
    {
        while (!arrived)
        {
            current_pos = llGetPos();
            checking_pos = destpos;
           
            within_range = FALSE;             
            while (!within_range)
            {
                if (llVecDist(checking_pos,current_pos) > safety_range)
                {
                    checking_pos = <(current_pos.x + checking_pos.x) / 2.0,(current_pos.y + checking_pos.y) / 2.0,(current_pos.z + checking_pos.z) / 2.0>;
                }
                else
                {
                    within_range = TRUE;
                   
                    if (llVecDist(destpos, current_pos) <= safety_range)
                    {
                        jumps = (integer)(llVecDist(destpos, current_pos) / 10.0) + 1;
                        rules = [ PRIM_POSITION, destpos ];  //The start for the rules list
                        count = 1;
                        while ( ( count = count << 1 ) < jumps)
                            rules = (rules=[]) + rules + rules;   //should tighten memory use.
                        llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );           
                       
                        arrived = TRUE;
                    }                   
                }
            }
           
            if (!arrived)
            {
                jumps = (integer)(llVecDist(checking_pos, current_pos) / 10.0) + 1;
                rules = [ PRIM_POSITION, checking_pos ];  //The start for the rules list
                count = 1;
                while ( ( count = count << 1 ) < jumps)
                    rules = (rules=[]) + rules + rules;   //should tighten memory use.
                llSetPrimitiveParams( rules + llList2List( rules, (count - jumps) << 1, count) );
            }
        }
    }
}
//=================================================
default
{
    state_entry()
    {
        llSitTarget(<0.0, 0.0, 0.01>, ZERO_ROTATION);                       
        llSetText(text,text_color,1.0);
        if (touch2sit)
            llSetClickAction(CLICK_ACTION_SIT);
        else
            llSetClickAction(CLICK_ACTION_NONE);
    } 
    changed(integer change)
    {
        if (change & CHANGED_LINK)
        {
            key user = llAvatarOnSitTarget();
            if (llGetAgentSize(user) != ZERO_VECTOR)
            {
                integer access_granted = FALSE;
                if (access_mode == 1)
                    access_granted = TRUE;
                else if (access_mode == 2)
                {
                    if (user == llGetOwner())
                        access_granted = TRUE;
                    else
                    {
                        llUnSit(user);                       
                        llSay(0,"  sorry, owner access only.");
                    }
                }
                else if (access_mode == 3)
                {
                    if (llSameGroup(user))
                        access_granted = TRUE;
                    else
                    {
                        llUnSit(user);
                        llSay(0,"  sorry, group memeber access only.");
                    }
                }
               
                if (access_granted)
                {
                    vector init_pos = llGetPos();               
//                  warpPos(destination); // use warPos() function
                    posJump(destination); // use posJump() function
                    llUnSit(user);
                    llSleep(0.2);
//                  warpPos(init_pos); // use warPos() function
                    posJump(init_pos); // use posJump() function               
                }
            }
        }
    }   
}
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/ The script ends _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/