Creating A Scene - HTML
Creating A Scene - HTML
Before we start
Before you can use three.js, you need somewhere to display it. Save the
following HTML to a file on your computer, along with a copy of three.js in
the js/ directory, and open it in your browser.
That's all. All the code below goes into the empty <script> tag.
Let's take a moment to explain what's going on here. We have now set up
the scene, our camera and the renderer.
There are a few different cameras in three.js. For now, let's use a
PerspectiveCamera.
The first attribute is the field of view. FOV is the extent of the scene that is
seen on the display at any given moment. The value is in degrees.
The second one is the aspect ratio. You almost always want to use the
width of the element divided by the height, or you'll get the same result as
when you play old movies on a widescreen TV - the image looks squished.
The next two attributes are the near and far clipping plane. What that
means, is that objects further away from the camera than the value of far
or closer than near won't be rendered. You don't have to worry about this
now, but you may want to use other values in your apps to get better
performance.
In addition to creating the renderer instance, we also need to set the size
at which we want it to render our app. It's a good idea to use the width and
height of the area we want to fill with our app - in this case, the width and
height of the browser window. For performance intensive apps, you can
also give setSize smaller values, like window.innerWidth/2 and
window.innerHeight/2, which will make the app render at half size.
If you wish to keep the size of your app but render it at a lower resolution,
you can do so by calling setSize with false as updateStyle (the third
argument). For example, setSize(window.innerWidth/2,
window.innerHeight/2, false) will render your app at half resolution, given
that your <canvas> has 100% width and height.
Last but not least, we add the renderer element to our HTML document.
This is a <canvas> element the renderer uses to display the scene to us.
"That's all good, but where's that cube you promised?" Let's add it now.
By default, when we call scene.add(), the thing we add will be added to the
coordinates (0,0,0). This would cause both the camera and the cube to be
inside each other. To avoid this, we simply move the camera out a bit.
This will create a loop that causes the renderer to draw the scene every
time the screen is refreshed (on a typical screen this means 60 times per
second). If you're new to writing games in the browser, you might say "why
don't we just create a setInterval ?" The thing is - we could, but
requestAnimationFrame has a number of advantages. Perhaps the most
important one is that it pauses when the user navigates to another
browser tab, hence not wasting their precious processing power and
battery life.
Add the following right above the renderer.render call in your animate
function:
This will be run every frame (normally 60 times per second), and give the
cube a nice rotation animation. Basically, anything you want to move or
change while the app is running has to go through the animate loop. You
can of course call other functions from there, so that you don't end up with
a animate function that's hundreds of lines.
The result
Congratulations! You have now completed your first three.js application.
It's simple, you have to start somewhere.
The full code is available below. Play around with it to get a better
understanding of how it works.