Second Life Virtual Library
Avatar:dson391
Design Process
First trial
Design Process
| 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. |
| 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'
| 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 _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
