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
  • 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
  • Particle Systems Demo
  • Cross-Browser Orbiter
  • Mocap Demo With Spheres
  • Google Maps-3D

C3DL Development News

C3DL 2.0-WebGL and beyond

It has been a long time coming but we have now updated all the core features of C3DL to use WebGL. You can dowload our 2.0 release here. We have also updated all our demos to use WebGL. Our tutorials have all been updated (tutorial 5 and 6 needs a better example [...]

Preliminary WebGL RTS Game

Cathy asked me to make a cool demo using our library. After thinking about, I started getting many ideas, but creating a preliminary real-time strategy game made the most sense. It not only demonstrates a lot of C3DL features such as model loading, transformations, lighting, shaders, picking, cameras, textures, etc, but since animation is kept [...]

Tutorials

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

Documentation

Archives

Archives

C3DL Development News

Recent Comments

  • 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
  • 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
  • Cross-browser progress update
  • let there be vars
  • Creating tester pages
  • Problems with porting
  • 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
  • Hi, is the project... - Sascha Hendel
  • I agree with both co... - Cathy Leung
  • Your library is real... - Sascha Hendel
  • Hi, as a more gener... - Sascha Hendel
  • Thanks. I just pull... - peter



Canvas 3d JS Library

©2007- 2009 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