CREATING WORLDS IN NEVERWORLD
CREATING A NEW WORLD: A WALKTHROUGH
APPENDIXES
Neverworld was created in order to make construction and viewing
of 3D worlds easy for everyone to use. Before Neverworld was created,
people who wanted to create a 3D computer model of something had
to choose between a few difficult choices:
Neverworld is designed for two things: 1) to make building 3D
models and worlds easy for everyone, 2) to let anybody view your
models with nothing more than a web browser. If you can surf home
pages on the web, you can learn to use Neverworld!
This instruction manual will teach you how to create your own worlds using Neverworld.
Just follow along these instructions, and you'll soon be creating
your own rooms for others to enjoy. Have fun!
WHAT YOU NEED TO VIEW NEVERWORLD
Neverworld is a 3D world. In order to view Neverworld, you will
need a web browser capable of viewing 3D VRML worlds. Usually,
browsers are equipped with a "plug-in" that allows your
web browser to view 3D worlds. The documentation that came with
your browser, or the help function on that browser, should tell
you how to tell if you are equipped to view 3D VRML worlds. In
theory, Neverworld will work with any web/VRML browser (Microsoft
Internet Explorer, NSCA Mosaic, Netscape 2.01 or higher, etc.)
but we recommend using Netscape 3.0 with the Live 3D 1.0 VRML
plug-in, since Neverworld has been most heavily tested using Netscape.
For those without Netscape, you can obtain it from http://netscape.com.
If you need help with this, the easiest way to get help is to
ask the person in your dorm or department assigned to help you
with computer questions.
Once you have installed a web browser that can view 3D worlds,
open up your web browser, and go to
You will then get a screen titled "Neverworld login."
In the space marked "user name", type in
guest
and in the space marked "password", put in your e-mail
address. Then, click OK.
The next screen has a button marked "Main menu." Clicking
on that button brings you to another window full of buttons. Click
on "Go Home" (third button from top).
Now, a 3D world should load up for you. You will appear in a big
room full of doors, gates, and other things. This place is a room
in Neverworld called "The Grand Nexus." It is the Neverworld
equivalent of Union Station: from here, you can go to many other
rooms throughout the Neverworld Universe.
The following instructions are for users of Live3D who are unfamiliar
with how to navigate around in a VRML world. Moving around in
a VRML world is very easy, so don't panic!
First, note the bottom left hand corner of your screen. You will
find a menu bar with choices like "walk", "spin",
"slide", etc. Note that "walk" is highlighted
in green. This menu bar allows you to choose a method of movement
in the 3D world, much like the stickshift of a car lets you choose
whether you go forward, reverse, neutral, etc.
These commands are also summarized in Appendix B in the back.
Let's try moving around: roughly center the mouse in the center
of the screen. To move, just hold down the mouse button, and then
move the mouse in the direction you want to go. Moving the mouse
up will cause you to walk forward; moving the mouse down will
cause you to walk backwards. A few minutes of playing with the
mouse will allow you to get the grasp of moving around.
Now, move the mouse to the lower left hand corner and click on
the word "spin". The word spin should turn green. Now,
hold down the mouse button and move the mouse around. You should
be able to spin the image around. If you spin the image too far,
just click the "view" button ( to the right of the "lamp"
command) on the bottom left hand corner of the Live3D interface
to return you to the position you entered the room at. A summary
of all the mouse movements is available in Appendix B.
This 3D world also contains portals to other rooms. Try the following:
without holding down the mouse button, move the mouse on top of
a door on the screen. Note how a message comes up. Try clicking
on it. You may be taken to another room. What you just clicked
on is a portal to other places. Feel free to explore the world
for a while, keep playing with the browser, and enjoy!
What happens if I get weird error messages instead of a room?
Occasionally, some of the rooms you reach may be broken. Just
click on the "back" button on your browser to take you
back to a room that works.
What do I do when I'm done traveling through Neverworld?
When you are finished, you need to leave Neverworld by logging out.
NOTE: Guests do not have the ability to create their own rooms
in Neverworld. You must have an account on Neverworld to do so.
Contact Andy Wilson at awilson@nwu.edu to get an account on Neverworld.
HOW IS THE NEVERWORLD SYSTEM
ORGANIZED?
When you log into the Neverworld server, you connect to a server
that contains all of the different parts of Neverworld. Neverworld
is composed of two parts:
When you create a room, and build a model inside that room, the
room you create does not have to be connected to the Grand Nexus.
In fact, that room does not have to stay in the Neverworld Universe.
You can export the file that describes your room, save it to disk,
copy it onto your own hard drive, and open up just the room without
logging back into Neverworld.
THE THEORY BEHIND NEVERWORLD ROOMS/MODELS
So, now you've seen some of the incredible places built in Neverworld.
Don't be intimidated by the apparent complexity of the
scenes. Everything in Neverworld is based on very easy to learn
concepts.
Do you remember playing with blocks when you were a kid? In order
to build a house or a castle, you stacked cubes, cones, long and
short blocks, etc. one on top of the other. Even though the blocks
themselves were simple, you could design really complex structures
by combining the blocks in complex ways.
Now, imagine that you can make blocks of any color or size. Suppose
that you can hang these blocks in mid-air, if you choose. You
can even stick them inside of each other, so that you could have
blocks poking out of other blocks. This is the way everything
in Neverworld is built.
Now, when you played with blocks as a kid, you and the blocks
weren't just floating in the middle of space; you and the blocks
were in a room. The same idea holds in Neverworld. You have to
create a room to keep all of your blocks in. Then, you need to
put yourself in the same room. After that, you can begin stacking
blocks.
Also, in Neverworld, you can create portals between rooms. That
way, you can build two rooms, and then build a portal between
the two rooms. So, when someone clicked on a particular block
or door, he/she would be transported to the other room.
This can be useful for a number of reasons. You could build your
model in such a way that if someone clicked on a part of that
model, she/he would be taken to a room with a blown-up copy of
that part. Or, if you were modeling a building, clicking on a
particular building took you to a model of the inside of that
building.
Some of the rooms are connected to the Grand Nexus. Others exist
in isolation. Whether or not the rooms you create will be connected
to the Grand Nexus is your choice. Connecting your room to the
Grand Nexus enables anyone visiting Neverworld to view your room,
which may or may not be what you had in mind.
CREATING YOUR OWN WORLDS IN NEVERWORLD:
NUTS AND BOLTS
Actually creating a room in Neverworld means typing a few lines
of code into the Programmer Interface. Basically, you tell the
computer to:
Let's take a quick peek at what the code for a room actually looks
like. Don't panic: we'll go through this in much more detail later.
We just want to show you what a room in Neverworld looks like.
The following code tells the computer to create a spherical room,
put you into that room, and then put a red cube 1 meter on a side
in the room with you.
| (define-object bigroom (supporting-object) ( ) )
(define-method (shape bigroom) (separator
(sphere 30))) | This first paragraph tells the computer to create a spherical room 30 meters in diameter. |
(move (user) bigroom) (set (position (user)) (v 0 1 5)) | These commands tell the computer to put the user into the room, at the coordinates x=0, y=1, z=5. |
| (define-object redbox (thing) ((location bigroom)))
(define-method (shape redbox) (separator (material 'diffuse (c 1 0 0)) (cube 1 1 1))) | These commands tell the computer to create a red cube 1m x 1m x 1m. |
At this point, you probably have lots of questions. Don't worry
about trying to understand what all of the words mean right now:
we'll explain everything piece by piece.
There are a few rules a Neverworld program obeys. First, note
that all of the commands are enclosed by parentheses. For every
opening parentheses "(", there must be a closing parentheses
")". Occasionally, there are sets of parentheses that
don't have anything in them: even though there is nothing between
them, they are still important parts of the command, and have
to be left in place.
Second, let's take a quick overview of the way the commands are
set up. (Don't worry: we will go over all of these commands in
greater depth later.)
For the following summary, words in bold are the commands themselves.
The items in italics are various details which you substitute
in.
| (define-object objectname (type) (options) ) | define-object tells the computer to create an object called "objectname" of type "type". Type can be:
The options are various options, depending on the type of object. |
| (define-method (shape objectname)
(separator (option 1a) (option 1b)) (separator (option 2a)
(option 2b)))
| If define-object told the computer what the object was, define-method tells the computer what the object looks like.
Inside the first set of parentheses is a command called the separator command (highlighted in red) The separator command groups together a block of commands into one group. That way, you can create groups of commands to describe different parts of the same shape. |
Among the options that can go inside of the separator that
can tell the computer what the object looks like are:
| (material 'diffuse (c r g b)) | This commands tells the computer what color the object is. The color is determined by a combination of red (r), green (g), and blue (b). |
| (translate x y z) | This command moves an object over a certain number of meters x, up a certain number of meters y, and a certain number of meters in the z direction. |
Directions in Neverworld are in terms of x, y, and z vectors.
+X is in to the right of your screen, +Y is going up toward the
ceiling, and +Z is going into the screen.
| (cube x y z)
(sphere radius) (cone radius height) | These are some of the various shapes that Neverworld can create. |
CREATING YOUR OWN WORLDS IN NEVERWORLD:
GETTING STARTED
While anybody can visit Neverworld as a guest (as you yourself
did earlier), you need to get a special account on Neverworld,
just like you needed an account to send and receive e-mail. In
order to get a Neverworld account, write Andy Wilson at awilson@nwu.edu.
Once you have obtained a Neverworld account, go back to the login
screen on the Neverworld homepage at
You will be prompted for your user name and a password again.
This time, type in the account name you received from Andy. If
this is our first time logging in, you will not yet have a password,
and can leave the password field blank. When you have entered
the required information, hit OK.
NOTE: Neverworld is currently not a secure server.
Thus, it is theoretically possible for someone to "sniff"
or steal your password as you enter it. DO NOT use any password
you use on any other machine or server as your Neverworld password,
and do not use your Neverworld password as a password on any other
machine.
The next screen allows you to examine the Neverworld preliminary
documentation, and a button marked "Main menu." Clicking
on that button brings you to another window full of buttons. The
important ones are as follows:
Go home: Clicking on this will take you to the grand nexus
of the current Neverworld Universe. Here you can browse the work
of others as we did earlier.
Programmer interface: Clicking on this button brings you
to the window where you do the actual programming.
Get / Send messages: These enable you to get or send messages
to other users of the Neverworld Universe.
Change password: This button allows you to change your
password.
Logout: Logs you out of Neverworld.
After you change your password, click on the button marked "programmer
interface" to begin creating your own worlds!
UNDERSTANDING THE PROGRAMMER INTERFACE AND
THIS MANUAL
The next part of the manual will lead you step by step through
creating your first world in Neverworld. Along the way, we will
show you how to create rooms, how to create all of the basic types
of blocks, how to move them around, and how to make portals between
rooms.
The programmer interface is the most important part of the Neverworld
interface. The programs you will write to create your 3D models
will be entered in the big text box on the page. After you finish
writing the code for a room, then you click the button "Run
this code." We will cover the purpose of the buttons on the
rest of the page later.
| Text that is meant to be typed into the computer will appear in courier font like this sentence, as well as be surrounded by a text box. |
In the portions of code used as examples, the program lines will
be numbered, so that they can be referred to in the text.
items in bold are the programming keywords,
words in italics
are user-inputted names or values.
Rather than entering a completed program all at once, you will
be asked to type in a chunk of code. Then, we'll explain it in
detail, and then we'll add on another chunk of code. We will build
up our programs once piece at a time, and after we have covered
all of the parts, then we will run it and see what it looks like.
So please have patience!
The first thing you need to do is to create a room to build everything
in. First, type in the following chunk of code into the window
of the programmer interface. For now, don't worry too much about
what all of this means. The spacing is not important.
| (define-object bigroom (supporting-object) ( ) )
(define-method (shape bigroom) (separator (sphere 30))) |
Now, let's go through each line and what it does:
1. (define-object bigroom (supporting-object) ( ) )
3. (separator
4. (sphere
30)))
In line 1, the define-object command tells the computer
to create a room called bigroom. However, the computer still doesn't
know what size or shape the room will be.
In lines 2-4, the define-method command tells the computer
that bigroom is a sphere with a radius of 30.
Rooms do not necessarily need to be spheres. By substituting other
shapes (like cube or cylinder ; more on this
later) the room can be different shapes as well.
This command also gives us a chance to review two other important
points. First, note that, just like in mathematics, there are
the same number of open parentheses as close parentheses. Second,
note the separator term encloses the sphere command
in line 4. Again, note the way the separator term (in red for
this illustration) separates off a chunk of text. Everything between
the separator command and the end ")" describes
the details of the object we are building, namely, the sphere.
PUTTING YOURSELF INTO THE ROOM
Now we've created a room, and told the computer what the room
looks like and how big the room is. However, none of this does
us any good, because we aren't in the room, yet. We won't
be able to see anything until we go into the room. So, type the
following into the programmers window below the previous section:
| (move (user) bigroom)
(set (position (user)) (v 0 1 5)) |
Let's go through these commands line by line.
In line 3, the move command moves the user (you) into the
room called bigroom. It doesn't tell the computer where in that
room to put you, yet.
In line 3, the computer put you into the room called bigroom.
Now, in line 4, the computer places you at a position x=3, y=0,
z=0 from the center of the room.
Directions in Neverworld are in terms of x, y, and z vectors.
+X is in to the right of your screen, +Y is going up toward the
ceiling, and +Z is going into the screen.
So far, all we have is a room. We still don't have anything in
there. Let's start out by putting a red cube in the center of
the room.
Neverworld creates objects in a room sequentially. Unless told
otherwise, it places the first object you create at the center
of the room, at the coordinates 0, 0, 0. After that, it moves
to the next location, creates the 2nd object, moves to the next
location, creates the 3rd object, etc. all the way until the end
of a "paragraph." A "paragraph" of code are
the commands between the separator command and the parentheses
that ends it, as in the example below:
(define-object objectname (type) (options) )
(define-method (shape objectname)
(separator
(option 1a)
(option 1b)))
After the end of the paragraph, the computer resets to the coordinates
0, 0, 0.
Now, remember that the computer draws the first object at the
very center of the room (0, 0, 0) unless it's told otherwise.
So, the very next thing we create will be created at the center
of the room. Let's try it now.
Type in the following into the programmer window below the previously
typed text:
| (define-object redbox (thing) ((location bigroom)))
(define-method (shape redbox) (separator (material 'diffuse (c 1 0 0)) (cube 1 1 1))) |
Let's go through this line by line again as well.
5. (define-object redbox (thing) ((location bigroom)))
6. (define method (shape redbox )
7. (separator
8. (material 'diffuse (c 1 0 0))
9. (cube
1 1 1)))
Again, define-object (in line 5) tells the computer to
make an object called redbox inside of the room called
bigroom. thing tells the computer that your object
is a thing, instead of a room or a portal. location tells
the computer where the object is. The computer still doesn't know
what the object called redbox is yet, though.
The define-method command in line 6 tells the computer
that everything between the separator and the ending )
(i.e., lines 7-9 in the example) describes what the shape
redbox is. Remember, for every opening parenthesis, there
must be an equal and opposite closing parenthesis.
Now, let's look at what was actually between the separator
and the ending ")":
8. (material 'diffuse (c
1 0 0))
Before you create an object, you have to tell the computer what
material to make the object out of. In this case, 'diffuse
(c 1 0 0) means that the object will be red. For
now, don't worry about what 'diffuse means. 'diffuse
is an advanced option that is covered in other documentation (see
the last section of this manual for details.)
The color is determined by combining red, green, and blue, to
make other colors. Every color in the Neverworld universe is encoded
by calling it (c r
g b), where the amount of
red ( r ), green ( g ), and blue ( b ) is
a number between 0 and 1. Thus, pure red is (c 1 0 0),
all white would be (c 1 1 1 ), a 50% gray would
be ( c 0.5 0.5 0.5 ), etc.
9. (cube 1
1 1)
After telling the computer what color material to make the object
out of, it's time to tell the computer what shape to actually
draw. The cube ( 1 1 1 ) command tells the computer
to draw a cube that is 1 m x 1 m x 1 m. Other available commands
are:
| (sphere radius ) | (cone base-radius height ) | (cylinder radius height ) |
| (sphere 1 ) draws a sphere of radius 1. | (cone 1 2 ) draws a cone of base radius 1 and height 2 | (cylinder 1 2 ) draws a cylinder of radius 1 and height 2. |
TAKING A LOOK AT WHAT YOU'VE DONE
You should now have the following in your programmer interface:
| (define-object bigroom (supporting-object) ( ) )
(define-method (shape bigroom) (separator
(sphere 30))) (move (user) bigroom)
(set (position (user)) (v 0 1 5)) (define-object redbox (thing) ((location bigroom))) (define-method (shape redbox) (separator (material 'diffuse (c 1 0 0)) (cube 1 1 1))) |
Now, we can run the program that we have written. First, click
on the button "Run this code." The screen will refresh,
and then the program interface window will be blank, and your
code should appear as a big mass of text.
If you mistyped something, you might get an error message: please
see the section in the back on error messages (Appendix A) for
more help.
Now, click on "Show viewpoint". This takes us to the
VRML window. If you have typed in everything properly, you should
see a red cube in front of you. Congratulations!
You may be wondering where the border of the room is. Remember
that the block is only 1m on a side, and the room is 10m in radius.
The edge of the room is too far away to see from your current
position; if you walk to the edge of the room, you can leave it
completely. From the outside, the room looks like a sphere, just
like we defined.
In order to add more objects, we need to return to the programmer
interface. Click "back" on your browser, and you should
be back to a programmer interface with a blank text box. You will
type your new code into this text box, and the computer will add
your new code to your old code automatically.
The next thing we can do is to add some more objects. In the now
blank window, type in the following:
| (define-object greensphere (thing) ((location bigroom)))
(define-method (shape greensphere) (separator (translate -3 0 0) (material 'diffuse (c 0 1 0))
(sphere 1))) (define-object cone-and-cylinder (thing) ((location bigroom))) (define-method (shape cone-and-cylinder) (separator (translate 3 0 0) (material 'diffuse (c 0 0 1)) (cone 1 1) (translate 0 3 0) (material 'diffuse (c 1 1 0)) (cylinder 1 1))) |
and then:
You should now see a green sphere on the left of your red cube,
a blue cone on the right, and a yellow cylinder above the blue
cone. How did this happen?
First, note the addition of a new line of code on the fourth line
of the new program:
(translate -3
0 0 )
This moves your cursor 3 spaces in the -x direction from the origin. Remember, we first created the room around the point 0,0,0. Then, without moving, we created the red cube. Now, we move (translate) 3 spaces to the right, and then go on to choose the color with the material command and choose the shape with the sphere command. After the last ) that ends the separator command, the cursor returns to the origin.
Now, note the other chunk of code:
1. (define-object cone-and-cylinder (thing) ((location bigroom)))
2. (define-method (shape cone-and-cylinder)
3. (separator
4. (translate 3 0 0)
5. (material 'diffuse (c 0 0 1))
6. (cone 1 1)
7. (translate 0 3 0)
8. (material 'diffuse (c 1 1 0))
9. (cylinder
1 1)))
We create a group of objects (called cone-and-cylinder)
in the same way we created a single object (like greensphere).
After the separator command, the command (translate
3 0 0 ) (line 4) moves us 3 in the +x direction from
the origin. We then create a blue cone (lines 5-6). After that,
the next translate command moves the cursor 3 units in
the + z direction starting from the current position, not from
the origin. Since we have not yet closed the separator
with a ")", the cursor is still at the position
3, 0, 0 where we drew the blue cone. Therefore, the (translate
0 0 3) (line 7) command moves the cursor from
3, 0, 0 to 3, 0, 3. After the ) that ends the separator
paragraph, the computer resets the location back to 0, 0, 0
CREATING A PORTAL TO SOMEWHERE ELSE
While being able to create large numbers of objects and forming
them into useful models is cool, it would also be nice to be able
to build other rooms and connect them together with portals. For
this purpose, lets create another room.
| (define-object smallroom (supporting-object) ( ) )
(define-method (shape smallroom) (separator
(sphere 10))) (move (user) smallroom) (set (position (user)) (v 0 1 5)) |
Again, the define-object command creates a room called
smallroom, the define-method command tells the computer
what the room called smallroom looks like, and the move
and set commands put the user into the room called
smallroom. We have seen all of this code before.
Now, into the center of this room, we will create a cyan slab
that will act as our portal back to bigroom. To do this,
type in the following below the text we just typed in:
| (define-object slab (portal) ((location smallroom)
(position (v 0 0 0)) (destination bigroom)
(destination-position (v 0 1 5)))) (define-method (shape slab) (separator (material 'diffuse (c 0 1 1)) (cube 1 4 1))) |
Now, to view our finished portal,
So how did this work? Let's take a look at the code:
1. (define-object slab (portal) ((location smallroom)
2. (position (v 0 0 0))
3. (destination bigroom)
4. (destination-position (v 0 1 5))))
5. (define-method (shape slab)
6. (separator
7. (material 'diffuse (c 0 1 1))
8. (cube 1 4
1)))
Here, we use define-object to define a portal called slab.
Even after all of this information, we now know where the portal
is and where it goes, but we still don't know where the portal
itself looks like! That again is the job of the define-method
command (line 5).
These commands are quite similar to the commands we used to create
the room with a red cube in it. Note that the portal (slab)
itself is the shape being defined.
SAVING AND RELOADING THE ROOM ON NEVERWORLD
Everything that you do is automatically saved by Neverworld. To
reload, just
For example, if you now, into the blank programmer interface box,
type
bigroom
SAVING AND EXPORTING YOUR ROOM AS A FILE
In order to view your finished rooms, you don't need to log into
Neverworld. You can convert the model into a file, which you can
then save onto a disk. After that, you can carry that disk to
another computer, load the file with a 3D VRML browser (like Netscape),
and view your model without ever logging into Neverworld! This
is very useful when the location you are going to has poor or
no Internet connections, or if you want to use the file on a portable
computer without a network connection.
Exporting your room to a file is very simple.
Opening up the file on some else's computer is equally as easy:
just
Deleting a chunk of code does not delete the object from
the room! In order to remove an object from a room, you must both
1) Delete the segment of code that corresponds to the object.
Find the segment of code that has the define-object objectname
and delete both the define-object and its define-method
section.
2) Enter the following command into the programmer interface:
(destroy-object! Objectname
)
and click "Run this code." The object is now gone.
USING THE OBJECT CONFIGURATION MENU
There is another way to edit objects other than the programmer
interface. By clicking on "Configure object", (steps
1-3 in Appendix A) you can bring up an entire menu of possible
parameters. By clicking on the hypertext links on the left hand
side, nearly anything can be changed. More on this will be covered
in more advanced documents.
More advanced options include:
Also, other options include taking one of the courses or seminars
periodically offered by the Northwestern Computer Science Department.
For more information or questions about Neverworld, contact
Lars Bergstrom | l-bergstrom@nwu.edu |
Ian Horswill (Asst. Professor, CS) |
idh377@nwu.edu |
Andy Wilson | awilson@nwu.edu |
Again, welcome to Neverworld!
APPENDIX A: COMMON ERROR MESSAGES:
Locations where Error Messages Appear:
Errors can appear in one of two places:
| |
|
Error Messages Explained
The following are some common error messages, what they mean,
and what you can do about them.
| Execution error | Usually caused by a misspelled command. Check the spelling of your keywords. |
| Undefined variable: supporting | If you accidentally forgot to put a dash in supporting-object, you get this error. Put in the dash. |
| Undefined variable: (some other word) | If you get the undefined variable error and it's not supporting, then your problem is that you probably misspelled the variable name either right after the define-object or the define-method commands. Check! |
| Undefined variable: unquote | Remember, vectors in Neverworld do NOT have commas in between the coordinates! If you wrote (v 0, 0, 1) instead of (v 0 0 1), you'll get this error. Look for the commas and fix them. |
After You Have Corrected the Error
Okay, I corrected the error: but when I run the thing, but
I see this huge <ouch> instead of the shape that is supposed
to be there. What do I do now?
Even though you corrected the error, inside the program, this
<ouch> you seen on the screen indicates that the computer
thinks something is wrong, even though it has already been
fixed. You need to reset the error counter manually, so that the
computer again thinks everything is correct.
Do the following:
| |
| |
| |
|
APPENDIX B: MOUSE MOVEMENT COMMANDS IN
LIVE 3D
| Holding the mouse button down and: | Moving toward the top of the screen | Moving toward the bottom of the screen | Moving the mouse left | Moving the Mouse right: |
| While in walk mode | Moving forward | Moving backward | Turning left | Turning right |
| While in spin mode | Turn the object clockwise | Turn the object counterclockwise | ||
| While in slide mode | Lower the object | Raise the object | Slide the object right | Slide the object left |