Canvas 3d JS Library

WebGL made easy!
  • rss
  • What is C3DL?
  • Download
  • Tutorials
    • Tutorial #1: WebGL Browsers
    • Tutorial #2: A simple scene
    • Tutorial #3: Callback
    • Tutorial #4: Models
    • Tutorial #5: Light effects
    • Tutorial #6: Picking
    • Tutorial #7: Materials
    • Tutorial #8: Particle Systems
  • Development News
  • Documentation
  • Community
  • Resources
  • Contact
  • About
I have completed the flickr demo and need to polish it up for displaying on the website.  The demo has 5 untextured cubes.  The user enters a search term and then clicks a button to search flickr for 5 images.  Once the images have been found they are downloaded and applied to the 5 cubes.  The user has the option to search for the next 5 pictures available if so desired.  The cube can be rotated in any given direction by clicking and dragging the cube.  Zooming and out from a cube happens by double clicking the cube. I said I would have the demo done this week but I ran into problems with the Free Camera.  I believe at one time the Free Camera Object would rotate around its Look At Point when its position was changed.  With this assumption I was setting its Look At Point to a point in 3d space.  This resulted in weird behaviour.  It turns out the Free Camera has changed and the Look At Point is not a fixed point in space but more of a direction and the camera does not rotate around the Look At Point when its position has changed. Here is my attempt to illustrate the situation: You are standing in a room looking at a chair in the middle of that room and you are facing the chair directly. What I thought would happen: Taking 2 steps to your left would result in doing a side step to the left and turning your body to the right to remain facing the chair directly. What is happening: Taking 2 steps to your left will result in doing a side step without turning your body to the right.  You are no longer looking directly at the chair. So it turned out I didn’t need to set the Look At Point since the Camera did not rotate on its own.  Another issue I came across was with Intervals in Javascript.  We have an Interval that runs to update the scene and all the objects in the scene.  Well I has set the linear velocity of the camera so it would move to the right spot gradually and I needed a way to check if the camera had arrived.  I used a timer to check every 250 milliseconds if the camera was close.  I started some debugging to see how close the camera was getting and I notice that my interval was only being executed about 3 times.  So I decreased my interval to 25 milliseconds and my interval was now executed 4 times.  I created a counter and removed as much processing as possible from the function and still it was only called 4 times.  I have not looked into it but there may be issues with intervals in Javascript.  I’m not sure how we’ll be handling threading in the future.  The problem might not have been the intervals since I have not researched it but I plan to. I spent a significant amount of time debugging a problem involving setting the angular velocity of the camera.  After fixing it, I started writing a small test to make sure it was working like it should.  I found myself writing another demo rather than a test and felt appropriate to call it Explorer since that’s basically all you can do in the demo and also because I saw myself exploring some of the maturing capabilities of the library.  I will place this in the Demos section on our next release, which should be soon. explorer This demo doesn’t do much in terms of interaction, you walk around and explore a strange environment which has spinning teapots, but it does demonstrate the power of the library.  It took very few lines to write it, less than 130 lines, most of which is initialization and only a handful that actually deal with any 3D math. This means anyone who has even a basic understanding of Javascript should not have a hard time writing a demo like this one. Another interesting thing about this demo is the use of a basic Skybox.  That’s not all that interesting until you start thinking that this can probably be added to the library. Therefore about 30 lines which is needed to create a set of flat planes and texture them can probably be reduced to just a couple to create the Skybox and give it the position of the camera.  This will make creating 3D environments that much easier. I’ve fixed a bunch of obvious javascript performance problems (memory allocated for no good reason). Now Im at the point where I need to see the difference in a real app, because further fixes won’t be as obvious. Will someone please put a testmain that uses models into svn? Don’t worry about making it pretty, just give me something to start from. If you insist on being picky – just email it to me. The cube renderer is a pretty disgusting function and could use a lot of fixing, but I think we’re getting rid of Cube anyway, so I won’t do much to it. It has been awhile since I last posted.  I have been busy on working with the Flickr API and how to get pictures from it.  The demo I was asked to work on next is taking random pictures from Flickr and add them to an object in a scene in canvas 3d.  This was already done by Philip over at Mozilla Labs .  His demo broke after an update to the Canvas3D extension.  His demo is found here. I decided to take it a little further and I want a demo where I can add photos to cubes in the scene but allow the user to rotate any cube by clicking on it and dragging.  Then if the user double clicks on the cube, the camera will zoom in on the cube and if the user double clicks again the camera will go back to it original position. I have all the individual parts working, I just need to combine it and pretty it up just a tad.  I will be releasing it next week. We get a gerk every 10 seconds on the 4 cubes sample. This happens when firefox accumulates about 10M of memory marked for garbage collection. By selectively commenting out code I’ve come to the conclusion all that memory is used for objects allocated with ‘new’. There may be some little bit used for local variables and maybe even plain function calls, but it’s negligible considering the scope of the problem I’m fixing. I didn’t even bother looking for a way to fix the garbage collector, I assume any such attempt is futile from javascript and a hacky way to make our code match what the garbage collector does will just kick us in the ass when the Firefox garbage collection algorithm is updated (if you don’t want it to happen, it surely will). But seing how most of the memory is allocated for new Vectors and Matrixes I’ve taking a simpler approach to solving the garbage collector troubles – don’t allocate memory in the first place. From the very start I’ve been wondering (I’ve even found a wtf comment saying so) why we allocate new Vectors and Matrixes when we just need to modify existing ones. Now I’ll go through the code and make sure we don’t. So far I haven’t seen any reason to worry that won’t be good enough. We’ll see. Of course changing such fundamentals as how variables are [re]allocated will break all the unit tests. This is the fate of those who choose to write them, and I’ll just have to fix them when I’m done. In the meantime don’t freak out if all the unit tests fail, but please do let me know if some real functionality gets broken. P.S. have you noticed how the cubes have been skewed while spinning since about 2 weeks ago? I fixed that, and don’t even know how :)

Videos

Demos

  • Asteroids-3D
  • RTS Prototype
  • Particle Systems Demo
  • Cross-Browser Orbiter
  • Mocap Demo With Spheres
  • Google Maps-3D

C3DL Development News

SceneCreator0.3

SceneCaster is an online application that allows people to create “spaces” which are 3d scenes on the browsers and share them which other.  It is free to sign up and relatively  easy easy to use. The main problems with SceneCaster are the requirements: The operating systems used are Windows XP or Vista and the browser [...]

WWW2010 in Raleigh

Yesterday Andor and I gave a talk at www 2010. It was about how mid level API’s can help web developers who may not wish to do extremely low level programming at the WebGL level achieve the 3D effects they want. The “slides” from our talk can be found here. The [...]

Tutorials

  • Tutorial #1: WebGL Browsers
  • Tutorial #2: A simple scene
  • Tutorial #3: Callback
  • Tutorial #4: Models
  • Tutorial #5: Light effects
  • Tutorial #6: Picking
  • Tutorial #7: Materials
  • Tutorial #8: Particle Systems

Documentation

Archives

Archives

C3DL Development News

Recent Comments

  • July 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • SceneCreator0.3
  • WWW2010 in Raleigh
  • Motionview
  • On the train to Mountainview
  • C3DL 2.0-WebGL and beyond
  • Preliminary WebGL RTS Game
  • Asteroids in 3D… and a bit of 2D
  • Another demo updated
  • Simplifying the Interface
  • Updating Demos
  • I'm encountering sim... - peter
  • I'm having the darnd... - Jeff
  • Excellent, I'm looki... - Some Funky Dude
  • Great demo! I was th... - Some Funky Dude
  • Hey, just wanted to... - Charles
  • keep it coming ve... - gero3
  • congrats on a great... - Paul Brunt
  • c++ not c# actually... - Cathy Leung
  • It's unbelievable ho... - Paul
  • Wow, now that's a co... - Andor Salga



Canvas 3d JS Library

©2007- 2010 Canvas 3d JS Library

Disclaimer: This website is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Canada License.
The Canvas 3d JS Library and Demos found on this website are licenced under the MIT License

Creative Commons License