PhotoSynth Viewer using Three.js

June 20th, 2011 by Henri Leave a reply »

I wasn’t happy with my previous WebGL PhotoSynth Viewer: my javascript parser was aware of the position of the cameras and I wasn’t doing anything useful with it… Furthermore I was only relying on XB-PointStream for the rendering (which manage to display perfectly a dense point cloud). But I definitively want to do more fancy stuff. So Goodbye XB-PointStream, Hello Three.js!

The only trouble with this demo is that it is using a proxy PHP page to bypass ajax cross-domain security issue. Thus I won’t put it online (as it would kill my bandwidth limit). But I’ll try to update my Google Chrome extension so that you can give it a try too (will take time and I’m going in holiday…sorry).

On the tech side, this demo is using:

Other news

On another side I’ve been up to:

  • compile a bundler version with PBA support (with bad result: fast BA but erroneous point cloud)
  • create a new framework for fast matching: already 3x faster than OpenSynther (which is already really fast). This new framework is compatible with multi-gpu and multi-cpu + you can add constraints to memory usage!
  • create an hybrid AR solution for my current work based on my panorama tracking demo and using gyroscope information to fix the computing time of the vision part


  1. Pierre says:

    Impressive !
    It could be cool to have the same working on PLY files from disk ;) with an additional files for images and camera position ;)

  2. Joey says:

    Hey, really stunning demo! You can easily do cross domain requests via YQL or you could set up your own appengine project to just reflect your requests. I’d really like to see this thing live.

  3. Henri says:

    @Pierre: Indeed, I`m also interested in making a bundle.out file parser to be able to read point cloud and camera position from Bundler!
    @Joey: Thanks for pointing me to YQL! I`m currently in holiday so I won`t be able to make this demo live until my return (14 July). But don`t worry You will be able to try this demo! I also want to update my Google Chrome extension with this new viewer (this way YQL won`t be necessary).

  4. rperrot says:

    Henri, tu indiques que PBA te donne des points incorrects, ne serait-ce pas un problème de précision ? (la bibliothèque est compilée en float plutôt qu’en double), Et de plus c’est précisé à la fois dans le papier et dans le manuel. Est-ce que ce nombre de points incorrects est important ? (sous entendu est-ce que ça peut limiter l’utilisation de cmvs derrière ?)

  5. Henri says:

    @all: rperrot is wondering if my issue with PBA is related to the float precision only of the GPU version of PBA.

    @rperrot: I’ve compiled 6 versions of Bundler with PBA support (x64/x86) and GPU float, CPU float/double. I’ve got the same issue even with the CPU double version so I don’t think that it is related to this.

  6. rperrot says:

    (Désolé pour la question/réponse en français, mais je trouve toujours curieux de poser une question en anglais à un français, même en conférence ;) )

    So there’s no quality difference between float and double version ? What about performance gain ?

    You also said that you’ve got erroneous point cloud, what does this means ? awful reconstruction ? many points invalid but reconstruction was ok ? some points invalid but reconstruction seams ok ?

    I ask you these questions because BA is the only step that is not parallelised on my bundler process. I’ve got a multithread sift (libsiftfast), implemented a multithread keymatching (it was easy). So I was searching for a multithread implementation of BA.

    I also got some code for parsing bundle.out and making a single ply file containing only reconstructed points. I skip camera informations but you could recover it very easily (I commented the lines corresponding to it). You could get this code here :

    Finally I made a map of some of reconstruction I made using bundler and cmvs :

  7. Henri says:

    @rperrot: I am currently in holiday in Mexico so I don t have acces to my computer (until 14 July). I will make the bundler version with PBA support available, this way you will know the kind of results you can have with this version. I have trouble of convergence with my dataset (that are working with sba): meaning the 100 first cameras are correctly registered and then the remaining cameras are not… Thanks for sharing the map of your creation! BTW do you have tried my Bundler Toolkit? SFMToolkit use SiftGPU which is really fast if you have an Nvidia card (open-source: hosted on github).

  8. rperrot says:

    No I didn’t try SFMToolkit. I’m on a mac computer with an ATI card so I’ve got two problems ! ;)

  9. Sendoa says:

    Hi Henri,

    I have started recently to try XB PointStream and three.js and I wanted to ask you if the method used by XB PointStream to render big point cloud is somehow performed in three.js, or if you would suggest using XB PointStream for big data instead of three.js.

    Thanks in advance

Leave a Reply