Code Monkey home page Code Monkey logo

magic-sand's Introduction

Magic Sand

Magic Sand is a software for operating an augmented reality sandbox like this one:

First View of a Magic Sandbox

An augmented reality sandbox is made of a sand box, a depth detector (like a Kinect) and a beamer coupled together. The software provided on this repository control the beamer and the kinect in order to project on the sand colors which are related to the height of the sand.

This project was inspired and adapted from the Augmented Reality Sandbox developped by UC Davis. It is a partial port of the SARndbox project of Oliver Kreylos under openframeworks and is also adapted from the ofxKinectProjectorToolkit by Gene Kogan.

It was ported to openFrameworks with multi-plateform support (linux/macos/windows), a simple user interface and a robust yet simple calibration procedure by Thomas Wolf and later modified and extended with some games by Rasmus R. Paulsen.

Animation of a Magic Sandbox

Magic-Sand was developed with the specific aim of simplifying the use of an augmented reality sandbox in a home/family environment :

  • run on a mid-range laptop / home computer (Windows / Mac OS X / Linux, minimal GPU requirement).
  • Easy calibration to easily disassemble and reassemble the sandbox.
  • simple, easy-to-use interface.
  • framework for future sandbox-based games and applications.

View of a Magic Sandbox

Main Features

Operates on a computer connected to a home cinema projector and a kinect sensor. The software controls the projector to project colors as a function of the sand level measured by the kinect sensor and transforms a sandbox in a colorful playground.

View of the interface to use the Magic Sandbox

Getting started

The easiest way to get started is to build the physical setup provided in the guide found at the tutorial page and/or check the reddit thread

Secondly, download and install/unpack the latest ready-to-use version of the software at the release page. Follow the instructions on the release page to download and install the necessary drivers.

Setting up the system

Connect and turn on the projector and the kinect and start the software.

By default the software starts in a setup mode where the depth or color image from the Kinect can be seen in the user interface and the projector projects a completely white image. This way it is easy to check if the Kinect is running (on Windows 10 machines it can be necessary to plug and unplug the Kinect several times before it starts) and if the projector is working. The status of the kinect and the projector can be seen in the status window to the lower left in the user interface.

In setup mode the physical positions of the Kinect and projector can be optimised.

Calibration

To calibrate the system so the kinect and the projector is in correspondence a few steps are needed:

  • Flatten the sand in the sand box.
  • Make sure that you see either the depth image or the color image from the Kinect (click advanced|Display Kinect Depth View)
  • Press Calibration|Manually Draw Sand Region
  • Define the sand region by drawing a rectangle with the mouse on the Kinect Depth or Color view
  • Press Automatically Calibrate Kinect & Projector - a series of Chessboard patterns are now projected on the sand.
  • When a prompt appears cover the sand box with a light piece of cardboard or similar
  • Press ok - a series of Chessboard patterns are now projected on the cardboard/plate.

If the calibration is succesful the status window should be updated showing that all is ok.

Animation of the calibration steps to use the Magic Sandbox

Debug mode for calibration

If the calibration was not succesful a debug mode can be enabled that will place debug files in the data\DebugFiles folder. These might point you in the direction of why the calibration failed. Do this by enabling advanced|Dump Debug and run the calibration routine again.

Starting the Application

If the calibration was succesful or if a calibration was done before, the application can be started by pressing space or pushing the Run button.

Now a colored map with iso-lines should appear on the sand. The framerate should be close to 60 FPS for modern PCs.

Sandbox games

There are a few games included in Magic-Sand

Shape an Island

The background for the game is that Denmark have more than 400 Islands and we wanted to create a game that could teach people about islands. We added a few non-Danish Islands as well. The aim of the game is to shape an Island that matches a given Island. Only the outer contour of the Island is compared (not the height). The game is played like this:

  • Press space to start the game - now a welcome screen appear
  • Shape a big island in the middle of the box (you have 30 seconds). It must NOT be connected to the edge of the box.
  • The application will check if an Island exists and if not will let you try again
  • Now a name of a given Island is given and you are to shape that specific Island (Australia for example)
  • After 30 seconds the application will match your Island with the given Island and show you the results and a score
  • Now you have 1 minute to reshape your Island
  • Yet another intermediate results will be shown
  • Now you have 30 seconds to finalise your Island
  • A final result is computed and your score is compared to the overall high-score

It is possible to add more Islands. Instructions will be added later.

This game was used in an educational event at the Danish Island Bornholm as seen in this video.

This game was mainly developed by Rasmus R. Paulsen.

The Sandimals 2-player game

In this game the box is divided into two halfes where each player is only allowed to move the sand in his half. The goal is collect as much food and as many skins as possible in 5 minutes. You get skins by having rabbits on your half and you get food by having fish on your half. The more rabbit the more skins per second. The more and bigger fish the more food per second.

Before starting the game you should flatten the sand and shape a big lake in the middle of the box.

The game is started by pressing f on the keyboard. After 5 minutes the game stop and the player who has the most food+skins wins the game.

You can also start the game by pressing 1 (complete beginner), 2 (novice), 3 (standard) and 4 (expert).

The behaviour of fish:

  • fish are light gray
  • there is always a fixed number of fish (10, 20, 30 depending on level) in the box
  • their speed is determined by their size
  • they move in flocks
  • they flee from sharks (they will get a red center)
  • they have a limited life-span (they have a grey center when they are soon dying)
  • they respawn at the current mother fish
  • if a fish is eaten by a shark it respawns as a baby fish by the current mother fish
  • the mother fish has a pink center
  • the current mother fish is the oldest fish in the box
  • if a fish ends on land it will seek downwards to find water

The behaviour of sharks:

  • the shark is white
  • there is always 2 sharks in the box
  • they move slow and have a white stomach when they are well fed
  • they get a black stomach when they are hungry but not hunting
  • they get a red stomach when they are hunting and will move fast
  • there is a chance they will start hunting when they are hungry
  • they will hunt the biggest fish that are close to them
  • if they catch the fish they eat it and their hunger decrease.
  • if the hunger get too much (if they are trapped) they will die
  • if a shark die a new shark respawns
  • a shark respawns where there is the highest density of fish
  • if they end on land they will seek downwards to find water

The behaviour of rabbits:

  • there is always a fixed number (4, 6 or 10 depending on level) of rabbits in the box
  • they move and stop
  • they live on land

Fish and sharks can be taken and moved using your hands if you shape them like a bowl.

This game was mainly developed by Rasmus R. Paulsen.

The animal and their mothers game

A mother fish and a mother rabbit can be enabled. The user can help the animals to reach their mothers by digging rivers or building mountains in the sand.

The game is started by pressing m on the keyboard.

This game was mainly developed by Thomas Wolfe.

Coding and Extending Magic Sand

Source Code

The full source code for Magic Sand is available on github.com/thomwolf/Magic-Sand.

Dependencies

Magic Sand is based on openframeworks release 0.9.3 and makes use of the following addons:

Quick start for editing the source code

  • Grab a copy of openframeworks for your OS.
  • Unpack the Magic-Sand in the app/myApps folder in the openframeworks directory tree
  • Grab the additionnal community addons listed above. They should be installed in the addons subdirectory of openframeworks
  • If you are a windows user, install the kinect drivers as detailed on the release page
  • Enjoy ! (Xcode / VS2015 project files are supplied, should work also on linux)

Be sure to check the openframeworks documentation and forum if you don't know it yet, it is an amazing community !

How it can be used

The code was designed trying to be easily extendable so that additional games/apps can be developed on its basis.

Note that some of the below descriptions are slightly out-of-date.

The KinectProjector class handles the communication with the kinect sensor, the calibration and the coordinates conversions between kinect (2D), world (3D) and projector (2D) coordinate systems.

You can create a KinectProjector object as a shared_ptr in the setup() function of your openframeworks app. It requires a pointer to the projector window (see provided main.cpp on how to properly setup two windows in openframeworks and get a pointer to the projector window).

The kinectProjector object can be shared among the various objects that need access to depth and conversions functions (not multi-thread proof of course).

For instance, a SandSurfaceRenderer object can be constructed with a pointer to the kinectProjector shared object. (the SandSurfaceRenderer class convert depth information in color using a editable colormap and display these colors on the sand).

A typical setup() function of a openframeworks app can thus reads:

std::shared_ptr<ofAppBaseWindow> projWindow;
std::shared_ptr<KinectProjector> kinectProjector;
SandSurfaceRenderer* sandSurfaceRenderer;

void ofApp::setup() {
	kinectProjector = std::make_shared<KinectProjector>(projWindow);
	kinectProjector->setup(true);

	sandSurfaceRenderer = new SandSurfaceRenderer(kinectProjector, projWindow);
	sandSurfaceRenderer->setup(true);
}

setup(true) indicates that the GUI of the kinectProjector and the sandSurfaceRenderer will be displayed.

The kinectProjector object then needs to be updated in the update() function of the openframeworks app (preferably before the objects that use its functions) and drawn in the projector draw() function.

The kinectProjector object needs full control on the projector window during the calibration process so you should be careful not to draw things on the projector window after the call to kinectProjector->drawProjectorWindow() if a calibration is currently performed (you can check kinectProjector->isCalibrating()).

The following example illustrates the update() and draw() functions to implement a simple augmented reality sandbox once the kinectProjector and sandSurfaceRenderer objects have been initiated as detailed above and provided that the projector window has a listener callback setup to the drawProjWindow(ofEventArgs &args) function (see main.cpp).

void ofApp::update(){
  kinectProjector->update();
  sandSurfaceRenderer->update();
}
void ofApp::drawProjWindow(ofEventArgs &args){
  kinectProjector->drawProjectorWindow();
    
  if (!kinectProjector->isCalibrating()){
      sandSurfaceRenderer->drawProjectorWindow();
      fboVehicles.draw(0,0);
  }
}

The source code of Magic Sand itself is a simple example on how to use the main KinectProjector class to make a simple game.

kinectProjector Functions

Shader functions

The sandSurfaceRenderer class shows example of shaders that can be used to compute color and how to set uniforms.

The following function of KinectProjector are of special interest to setup a uniform.

void bind();
void unbind();
ofMatrix4x4 getTransposedKinectWorldMatrix();
ofMatrix4x4 getTransposedKinectProjMatrix();

The sampler2DRect received in the shader is normalized between 0 and 1, a conversion scale thus has to be also sent.

Coordinate conversion / elevation functions

Three coordinate systems can be used:

  • the kinect coordinate system of the 2D kinect image : (x, y) in pixel units with origin in the top-left corner,
  • the world coordinate system: a 3D coordinate system (x, y, z) in millimeters units originating from the kinect sensor with z axis extending from the kinect sensor, x the horizontal axis of the kinect sensor and y the vertical axis, and
  • the projector coordinate system of the 2D projector image : (x, y) in pixel units with origin in the top-left corner.

The most straighforward conversion goes from kinect coordinates to world coordinate system and projector coordinate system. If you want to animate or display objects, a natural choice would thus be to store then in kinect coordinate and to perform the conversion on display.

The following functions provide conversions between the coordinate systems:

ofVec2f worldCoordToProjCoord(ofVec3f vin);
ofVec3f projCoordAndWorldZToWorldCoord(float projX, float projY, float worldZ);
ofVec2f kinectCoordToProjCoord(float x, float y);
ofVec3f kinectCoordToWorldCoord(float x, float y);
ofVec2f worldCoordTokinectCoord(ofVec3f wc);

Another value that can be used is the elevation which is the distance from a point in world coordinate to a 3D base plane of that is defined by:

  • a normal (getBasePlaneNormal()) and an offset (getBasePlaneOffset()), or
  • a plane equation (getBasePlaneEq()).

elevation can be converted/accessed by the following functions:

float elevationAtKinectCoord(float x, float y);
float elevationToKinectDepth(float elevation, float x, float y);

KinectProjector also store a matrix of gradients of the kinect depth in the world coordinate system (slope of the sand) computed with a given resolution (with a 10 pixels bin by default). The gradient at a given location can be accessed by:

ofVec2f gradientAtKinectCoord(float x, float y);

Setup & calibration functions

startFullCalibration() perfoms an automatic calibration of the kinect and the projector. An automatic calibration comprises:

  • ask the user to flatten the sand,
  • measure the average plane formed by the sand surface to define the base plane (see above),
  • display and find 5 chess boards (60 calibration points) on the sand surface,
  • ask the user to cover the sand with a board,
  • display and find 5 chess boards (60 calibration points) on the board surface,
  • set the detection ceiling to 50 milimeters above the board.

The following functions can be called to change some internal values of kinectProjector:

  • setGradFieldResolution(int gradFieldResolution): change the resolution of the gradient field
  • setSpatialFiltering(bool sspatialFiltering): toggle the spatial filtering of the depth frame
  • setFollowBigChanges(bool sfollowBigChanges): toggle "big change" detection (follow the hand of the user).

Kinect projector state functions

The following functions give information of the state of the kinectprojector object:

  • isCalibrating(): is the kinectProjector currently performing a calibration
  • isCalibrated(): is the kinectProjector calibrated (calibration file found or calibration performed)
  • isImageStabilized(): is the depth frame stabilized (arbitrary time frame after initialisation)
  • isBasePlaneUpdated(): was the base plane updated in the previous call to `update()'
  • isROIUpdated(): was the sand region location/extension updated in the previous call to `update()'
  • isCalibrationUpdated(): was the calibration updated in the previous call to `update()'

Kinect projector other getters

The following functions give additional information :

  • getKinectROI(): get the sand region location/extension
  • getKinectRes(): get the kinect resolution
  • getBasePlaneNormal() : see above
  • getBasePlaneOffset() : see above
  • getBasePlaneEq() : see above

Main differences with SARndbox

Magic Sand is a cross-platform project while SARndbox currently is only Linux. SARndbox is inherited from a larger VR toolbox that makes is somewhat daunting to start modifying. We hope that Magic Sand is slightly easier to start with.

Magic Sand uses the build-in registration feature of the kinect to perform an automatic calibration between the projector and the kinect sensor and does not use a pixel based depth calibration.

It is thus probably less acurate than SARndbox.

Magic Sand does not provide dynamic rain features (typically require a stronger GPU than the graphic card provided on a laptop).

Changelog

1.5.4.1 - 10-10-2017

Bug fix release

Bug fixes

  • The calibration procedure was broken in 1.5.4 - it did not show the checkerboard. Now fixed.

Added

  • Linux make files (experimental)

1.5.4 - 23-09-2017

Minor release of Magic-Sand-with-Games

Added

  • Kinect FPS counter for received frames
  • XCode build files
  • Full frame filter option
  • Simple InPainting option for removing outliers in the depth map
  • Better scaling of GUI
  • Debug feature: Kinect ROI can be seen on projector
  • Debug feature: Left mouse click in Kinect depth view will print depth coordinates on console
  • ChangeLog to the README

Changed

  • Animals in animal game is now flipped depending on Kinect-projector matrix - so hopefully no more backwards swimming
  • GUI update for animal game. Now updates animal numbers
  • Adjusted game constants for animal game.
  • Added beginner/novice/normal/expert game mode. Press 1, 2, 3 or 4 to start the different modes.

Bug fixes

  • Spatial filter now correctly filters the ROI

1.5.0 - 08-08-2017

Initial release of Magic-Sand with Games

magic-sand's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magic-sand's Issues

Mother rabbits

What does the mother rabbit do? Other than flash a lot?

Calibration Issue

When I complete the calibration I am left with this image projected on the sandbox:
image

I am using a Window's 10 PC with a decent graphic's card.

Any help is greatly appreciated.

vertex version error

glsl error
can you guide me what is problem here. because this error i cant get color on sand.
system intel i3 with 2gb ram
navida gforce 210 graphics mfg by zotac
driver from navida website
win-7 32bit

how i can solve this issue thanks

MacOS Mojave 10.14.4

The app crashes right away without a glimpse on what the error can be on MacOS Mojave 10.14.4. Please gimme a tip on how to debug it.
Screenshot 2019-09-23 at 21 49 42

Reprojection Error too Big - Tried a few different things

Hello,

Would appreciate any help to fix this. I am using a sandbox already set up for Oliver's Berkley program. I swapped computers and used one that I tested at home with Magic Sand. It worked at home but when I plug it into the Kinect and Projector setup at our museum, it gives me a reprojection error. I tried reducing the light spill and using a board that wasn't too reflective. I tried multiple times on the sand, with the board at a higher height, lower height etc... to no avail.
I noticed that when I switch to the depth camera that I can't see anything until I raise my hand closer to the mounted Kinect. But this distance works fine for the other sandbox program. I'm not sure if this is an issue.

Here is a video of my calibration: https://youtu.be/eTN4UBVPtqw
Here is a video of Berkley's Program working on it: https://youtu.be/6DqviANPyHE

It would be awesome if I could get any help to get this up and running and try some games with our visitors :)

Thank you much.

1414 Kinect Sensor Not Widescreen?

Hello. I am building a sandbox for my office and it seems the Kinect Sensor can't see all 4 walls of my table. The table is 50" x 30".

Is there anything I can do in your software to tell it that my sandbox is not a perfect square?

Calibration process issues?

Hey,

I've recently downloaded your .exe version of the project - but I'm having difficulty attempting to get the kinect to calibrate? I have installed all of the required 32-bit drivers using Zadig, but in the console for magic sand I keep getting this message - "setFromPixels(): allocating to match dimensions: 0 0" and also, "ofxKinect: update(): device 0 isn't delivering data, reconnecting tries: 1" - though if I use the display kinect depth view in the magic sand window, it does display the Kinect input.

I'll continue to tinker, but any help with this would be fantastic! :-)

Thanks,

Daniel

How to add addons in the project

I use the projectGenerator.exe to add some other addons to the project. Importing the magic-sand seems dosen't find the project. And I enter the project path, it can not recognize the project name. Can you help me?
a9d9b7abb0aa4c73c029d9582d3621b

How to add Maps to the map game?

Hello,
Thank you for this very cool project.
I installed it today. The automatic calibration if very cool.
I'd like to add new maps, especially maps for the Britany Islands (France).
What software did you use to get the maps and associated masks?
What is the recommended size for such a map?

I tried the games too. My daughter liked them very much :)

Kinect Motor driver

Hello Thomas,

I'm having trouble finding the driver for the Kinect using zadig.
The Camera and Audio are already installed and recognized in device manager.
I tried to run through the calibration process without it but, as it seems, the software can not properly calibrate the internal box depths without it. Any ideas?

Strange colored lines on Kinect RGB images during calibration

I am trying to calibrate my Sandbox and get some truly strange results. Once it succeeded though.
I have modified the source so it spits out some debug images. One is attached.
As can be seen there are colored lines going over the RGB images captured by the Kinect when doing the chessboard detection.
Anyone having similar issues? I suspect a faulty sensor or a driver problem?

magicsanddrop_6-6-2017-13-13-0-0

Updated build info on Visual Studio 2015

I have succesfully build the Magic Sand project on Windows 10 using Visual Studio 2015. Here is how I did it:

Magic sand build instructions (June 2017)

  • unpack into [source]\of_v0.9.8_vs_release
  • Download ofxCv, ofxParagraph, ofxDatGui, ofxModal
  • unpack them in the addons folder in the openframeworks folder: [source]\of_v0.9.8_vs_release\addons\
  • Download latest GIT version of Magic Sand here: https://github.com/thomwolf/Magic-Sand
    • unpack in the apps version of the openframeworks folder: [source]\of_v0.9.8_vs_release\apps\myApps
  • Open the "Magic Sand.sln" solution file using VS2015
  • Go into the project settings of the "Magic Sand" project (do this for both the debug and release version)
  • In "Configuration Properties | C/C++ / Additional Include Directories" update include folders:
    some folders points to local folders on "Thoms system" - change them to relative directories "......\addons"

[source] is your local source directory

@thom : You might update the Magic Sand.sln solution to have relative include paths as described above.

Calibration Mac

I am having problems with my mac when it starts and tried to calibrate. It seems to stop after the step when it detects the walls and then I just get a black screen. Ive tried calibrating several times and it never goes past step two in the calibration. Any ideas? Ive built the setup almost exactly like yours.

Possible to add water simulation?

Hello!

Thanks for the great project.

I was wondering if there was an easy way, or if someone has done it themselves already, to add the water simulation to this, perhaps by adding some code somewhere?

Thanks!

Can't see Kinect

Running 10.9. Model 1414 connect sensor. 2013 MacBook air. Magic sand gets stuck on full calibration. It just says stabilizing acquisition. When I first open Magic send it says it still can't see the Connect yet I do see the device in device manager. Any ideas?

FYI: Linux installation

After breaking my head for about 2 weeks I have managed to install underlinux:

  1. install openframework 10.0 including deps and build OF
  2. goto addons folder and install all libs
    git clone https://github.com/kylemcdonald/ofxCv.git
    git clone https://github.com/braitsch/ofxDatGui.git
    git clone https://github.com/braitsch/ofxModal.git
    git clone https://github.com/braitsch/ofxParagraph.git
  3. We need to switch to dev branch of ofxDatGui
    cd ofxDatGui
    git checkout dev
  4. Download and install 1.5.4.1 in the apps/myapps filder
  5. open projectGenerator-linux64/projectGenerator
    Open 1.5.4.1 in the sketch
    install the following addons
    ofxCv, ofxDatGui, ofxKinect, ofxModal, ofxOpencv, ofxParagraph, ofxXmlsettings
  6. Update
  7. goto to apps folder and cd to 1_5_4_1
  8. make

Good luck to all!

OK to leave Kinect on?

I have this setup in my office. The idea is to leave it running all day and night and use the projector's remote control to "turn it on"

This means the Kinect will be on and functioning all day and night. Is this OK?

libusb0.dll not found

Hi, I am running into an issue when I try to execute the Magic-Sand.exe, I have installed the Kinect SDK and I have installed the drivers but when I trying to install the executable I get this error, I have windows 10.
What should I do

how to operate projector

hi I installed all software as per documentation on this guthub. problem is how to operate projector Window ?? I connect it over HDMI port. should I do Windows + p for screen selection or duplication ?? or something else there are 4 options PC only, projector only, duplicate and extend which one I choose to get projector output on sandbox ?

Doesnt work with Sierra

After updating to the latest MAC OS the program will not run. I am going to try the universities load to get the box up and running again, however my son's favorite part was the fish and the rabbits. If you could fix the code it would be greatly appreciated!

DLL Issues, Windows 10

Hello,

We spoke on Reddit about getting this running on windows 10. I was able to get my Kinect plugged in, and I believe I followed the steps fully, however I am running into much the same issues with getting the MagicSand.exe file to run. I currently get 3 DLL errors, stating they are missing.

MSVCP140.DLL
vcruntime140.DLL
CONCRT140.DLL

I searched my PC and I know the DLLs are installed in my system 32 folder
(C:\Windows\System32), What folder path does the .exe use to look for these DLLs, or do you have any idea what may be happening?

Thanks!

Doesn't have color after calibration

Hello,

I having some trouble with the software
after i have calibrate the kinect and the beamer
i start the game the welcome screen will appear nicely in color
but after that i don't have any color or image on the sandbox

Crash in kinectCoordToWorldCoord

I got a crash in kinectCoordToWorldCoord and found the following issue:

The y coordinate was larger than kinectRes.y this causes an out-of-bounds error in:
kc.z = FilteredDepthImage.getFloatPixelsRef().getData()[ind];

The call stack revealed that the bad y-coordinate originates in:
updateBeachDetection in vehicle.cpp where the future position becomes out of bounds.

A quick and dirty hack is to add:
if (y < 0)
y = 0;
if (y >= kinectRes.y)
y = kinectRes.y - 1;
if (x < 0)
x = 0;
if (x >= kinectRes.x)
x = kinectRes.x - 1;

to the start of
kinectCoordToWorldCoord

Crash during 'defining sand region'

I am getting this crash on two different systems both running the latest release (1.5.4.1).

When I run magicsand, it opens fine, the projector does a white image, and I can see the video from the Kinect. Following the instructions, I then click 'manually define sand region' under 'calibrate'.

I assume that the next step is to click four times to define the boundary of the sand in the image.

However, after the first click, the program slows, freezes, and then becomes unresponsive and/or crashes.

The console screen displays the following information when it freezes:

capture

It looks like it captures the first point, then freezes. Sometimes I get the final line ('expected ...'), sometime I don't.

I get the same crash issue on two completely different systems (both running Win10 64).

  • Surface Pro 4
  • HP ProBook

Unfortunately this means I can't progress the calibration at all.

Any ideas how to troubleshoot this crash?

Color gradient didn't appear

When I run the program, the contour line looks perfect but without colour gradient :( it appear white colour. Something wrong with the colour map, based on the terminal window information, there are some errors. Moreover, the Kinect Motor driver also does not appear on my driver list.

Just for your information, my Kinect is first generation product. I attached the list of the screen captures:
https://drive.google.com/drive/folders/14aywqUgpmQGxO-Fb41Ey34he9t5l43x7?usp=sharing
There are three files in these link:
1.Terminal window (Issue.txt)
2.Photo of the contour lines over the sand. (.jpg)
3.Screenshot of the Zedac drivers. (.jpg)

Best regards,
Hawkar Ali

Code upgrade to support Kinect V2

Hi Thom,
I impressed by your project. I found the UC Sandbox project code impressive but very hard to customize due to the code structure. I therefore would like to test your approach.
However, I would like to use the Kinect 2. As far as I can see , your project only support Kinect V1.
My question is your estimate of the complexity of supporting Kinect 2. Probably it means adapting to freenect2. What is your estimate on the workload involved?
Best,
Rasmus

License?

Came here from your imgur album. Thanks for open sourcing it! Could you add a license to solidify your stance on commercial and home use?

color projection error

here i attach snap shot of sandbox. i software run smoothly but it is not map kinect projection properly
color error on top left side

Hardware requirements

Any idea on hardware requirements? I built one out for my kids last year using a spare laptop and had no real issues. I'd like to build one out for a charity organization but funding is a little tight.

Any thoughts on what minimum requirements I should look for on processor/memory/GPU?

Thinking about a windows mini PC (haven't seen anything successful with RasPi, so can't go quite that cheap).

I have trouble to connect Kinect while running magic-sand

Hi,
I have trouble to connect Kinect while running magic-sand. (Kinect works well via Kinect SDK 2.0, but not work when I transfer driver to libusb-win32 by Zadig)
My environment are:

  1. CPU Intel Corei5 w/ 4G RAM
  2. OS: Windows 10 64bit
  3. Kinect V2 (XBox one)
  4. Kinect SDK 1.8 or Kinect SDK 2.0 (I tried both)
    I don't know what wrong I made, please kindly help. Thank you very very much.
    Sincerely
    James Ho

fishes swim backwards

Everything is working well but, the fishes swim backwards in versions 1.5 and 1.54, (not in version 1 where they swam well, but this old version is not working anymore, it freeze in calibration process).
what could it be? is it normal?

No color map display on Ubuntu Linux

Compiled Magic-Sand in Ubuntu Linux 16.04.3 LTS with ofx0.9.8 (also tried with ofx 0.9.3)
(Compiling works fine when switching ofxCv to stable branch:

cd of_v0.9.3_linux64_release/addons/ofxCv/libs/ofxCv/include/ofxCv/
git checkout stable

)

When starting the program with ./Magic-Sand, the "no calibration file" message appears and the autocalibration starts. After the calibration process I see the 3 menus on screen but no sandbox colormap.
When going to Settings, Display Kinect depth view and holding my hand into the sandbox, I see the hand in the depth map.
But how can I activate the sandbox colormap ?

RasPi : make error

Hello !

I try to install Magic-Sand on a Raspberry Pi 3, and got some trouble...

In parallel, I've installed the same way on a pc and it worked, so I'm a little confused !

I've start the project on a new Raspbian litle SD card and follow all Readme files without problem :

  • do the raspi-config stuff
  • install openFrameworks for raspbian in ~/openFrameworks (dl from github, install-dep.sh & install-codecs.sh, make, and test all examples) : everything run right.
  • install ofxCv ofxDatGui ofxModal ofxParagraph and their sub modules in openFrameworks/addons
  • git clone Magic-Sand in openFrameworks/apps/myApps/

As there is a MakeFile, I run make...


pi@sandbox:~/openFrameworks/apps/myApps/Magic-Sand $ make
HOST_OS=Linux
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0
Compiling OF library for Release
make[1]: Entering directory '/home/pi/openFrameworks/libs/openFrameworksCompiled/project'
HOST_OS=Linux
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0
HOST_OS=Linux
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0
HOST_OS=Linux
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0
Done!
make[1]: Leaving directory '/home/pi/openFrameworks/libs/openFrameworksCompiled/project'

Compiling Magic-Sand for Release
make[1]: Entering directory '/home/pi/openFrameworks/apps/myApps/Magic-Sand'
HOST_OS=Linux
checking pkg-config libraries: cairo zlib gstreamer-app-1.0 gstreamer-1.0 gstreamer-video-1.0 gstreamer-base-1.0 libudev freetype2 fontconfig sndfile openal openssl gtk+-3.0
cat: obj/linuxarmv6l/Release/.compiler_flags: Aucun fichier ou dossier de ce type
Compiling /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.cpp
g++ -c -O3 -DNDEBUG -Wall -std=c++14 -DGCC_HAS_REGEX -march=armv6 -mfpu=vfp -mfloat-abi=hard -fPIC -ftree-vectorize -Wno-psabi -pipe -DOF_USING_GTK -DOF_USING_GTK -DTARGET_RASPBERRY_PI -DSTANDALONE -DPIC -D_REENTRANT -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS -DTARGET_POSIX -DHAVE_LIBOPENMAX=2 -DOMX -DOMX_SKIP64BIT -DUSE_EXTERNAL_OMX -DHAVE_LIBBCM_HOST -DUSE_EXTERNAL_LIBBCM_HOST -DUSE_VCHIQ_ARM -I/opt/vc/include -I/opt/vc/include/IL -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/AL -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/libusb-1.0 -I/usr/include/opencv -I/home/pi/openFrameworks/libs/fmodex/include -I/home/pi/openFrameworks/libs/glfw/include -I/home/pi/openFrameworks/libs/glfw/include/GLFW -I/home/pi/openFrameworks/libs/kiss/include -I/home/pi/openFrameworks/libs/poco/include -I/home/pi/openFrameworks/libs/tess2/include -I/home/pi/openFrameworks/libs/utf8cpp/include -I/home/pi/openFrameworks/libs/utf8cpp/include/utf8 -I/home/pi/openFrameworks/libs/openFrameworks -I/home/pi/openFrameworks/libs/openFrameworks/communication -I/home/pi/openFrameworks/libs/openFrameworks/video -I/home/pi/openFrameworks/libs/openFrameworks/graphics -I/home/pi/openFrameworks/libs/openFrameworks/events -I/home/pi/openFrameworks/libs/openFrameworks/app -I/home/pi/openFrameworks/libs/openFrameworks/math -I/home/pi/openFrameworks/libs/openFrameworks/utils -I/home/pi/openFrameworks/libs/openFrameworks/3d -I/home/pi/openFrameworks/libs/openFrameworks/sound -I/home/pi/openFrameworks/libs/openFrameworks/gl -I/home/pi/openFrameworks/libs/openFrameworks/types -pthread -I/usr/include/gstreamer-1.0 -I/usr/include/AL -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/glib-2.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/libusb-1.0 -I/usr/include/opencv -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcshareddata -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcshareddata/xcschemes -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcuserdata -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcuserdata/thomaswolf.xcuserdatad -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcuserdata/thomaswolf.xcuserdatad/xcschemes -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/xcuserdata/thomaswolf.xcuserdatad/xcdebugger -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/project.xcworkspace -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/project.xcworkspace/xcshareddata -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/project.xcworkspace/xcuserdata -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/Magic-Sand.xcodeproj/project.xcworkspace/xcuserdata/thomaswolf.xcuserdatad -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/icon.iconset -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/geometry -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/unicode -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/memory_manager_stateless -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/interfaces -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/matrix -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/libs/dlib/matrix/lapack -I/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/SandSurfaceRenderer -I/home/pi/openFrameworks/addons/ofxKinect/src -I/home/pi/openFrameworks/addons/ofxKinect/src/extra -I/home/pi/openFrameworks/addons/ofxKinect/libs -I/home/pi/openFrameworks/addons/ofxKinect/libs/libusb-win32 -I/home/pi/openFrameworks/addons/ofxKinect/libs/libusb-1.0 -I/home/pi/openFrameworks/addons/ofxKinect/libs/libfreenect -I/home/pi/openFrameworks/addons/ofxKinect/libs/libfreenect/include -I/home/pi/openFrameworks/addons/ofxKinect/libs/libfreenect/src -I/home/pi/openFrameworks/addons/ofxKinect/libs/libfreenect/platform -I/home/pi/openFrameworks/addons/ofxKinect/libs/libfreenect/include -I/home/pi/openFrameworks/addons/ofxOpenCv/src -I/home/pi/openFrameworks/addons/ofxOpenCv/libs -I/home/pi/openFrameworks/addons/ofxXmlSettings/src -I/home/pi/openFrameworks/addons/ofxXmlSettings/libs -I/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include -I/home/pi/openFrameworks/addons/ofxCv/libs/CLD/include/CLD -I/home/pi/openFrameworks/addons/ofxCv/src -Isrc -I/home/pi/openFrameworks/addons/ofxDatGui/src -I/home/pi/openFrameworks/addons/ofxDatGui/src/themes -I/home/pi/openFrameworks/addons/ofxDatGui/src/libs -I/home/pi/openFrameworks/addons/ofxDatGui/src/libs/ofxSmartFont -I/home/pi/openFrameworks/addons/ofxDatGui/src/components -I/home/pi/openFrameworks/addons/ofxDatGui/src/core -I/home/pi/openFrameworks/addons/ofxModal/src -I/home/pi/openFrameworks/addons/ofxParagraph/src -MMD -MP -MF obj/linuxarmv6l/Release/src/vehicle.d -MT obj/linuxarmv6l/Release/src/vehicle.o -o obj/linuxarmv6l/Release/src/vehicle.o -c /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.cpp
In file included from /home/pi/openFrameworks/addons/ofxCv/src/ofxCv.h:9:0,
from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.h:25,
from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.cpp:22:
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:260:19: error: ‘cv::Point2f ofxCv::toCv’ redeclared as different kind of symbol
cv::Point2f toCv(glm::vec2 vec);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:259:10: note: previous declaration ‘cv::Mat ofxCv::toCv(ofMesh&)’
cv::Mat toCv(ofMesh& mesh);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:260:19: error: ‘glm’ has not been declared
cv::Point2f toCv(glm::vec2 vec);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:261:19: error: ‘cv::Point3f ofxCv::toCv’ redeclared as different kind of symbol
cv::Point3f toCv(glm::vec3 vec);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:259:10: note: previous declaration ‘cv::Mat ofxCv::toCv(ofMesh&)’
cv::Mat toCv(ofMesh& mesh);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:261:19: error: ‘glm’ has not been declared
cv::Point3f toCv(glm::vec3 vec);
^
/home/pi/openFrameworks/addons/ofxCv/libs/ofxCv/include/ofxCv/Utilities.h:264:50: error: ‘glm’ was not declared in this scope
std::vectorcv::Point2f toCv(const std::vectorglm::vec2& points);

...
--- I've cut the hundred of errors and warning line that follows
...
In file included from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/KinectGrabber.h:28:0,
from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/KinectProjector.h:31,
from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.h:27,
from /home/pi/openFrameworks/apps/myApps/Magic-Sand/src/vehicle.cpp:22:
/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/Utils.h:317:14: warning: ‘bool ofxCSG::isPointOnPlane(ofVec3f, ofVec3f, float, float)’ defined but not used [-Wunused-function]
static bool isPointOnPlane( ofVec3f p, ofVec3f planeNormal, float w, float epsilon = EPSILON)
^
/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/Utils.h:323:14: warning: ‘bool ofxCSG::isPointInTriangle(ofVec3f, ofVec3f, ofVec3f, ofVec3f, ofVec3f, float)’ defined but not used [-Wunused-function]
static bool isPointInTriangle(ofVec3f p, ofVec3f a, ofVec3f b, ofVec3f c, ofVec3f normal, float epsilon )
^
/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/Utils.h:344:14: warning: ‘bool ofxCSG::intersectRayTriangle(ofVec3f, ofVec3f, ofVec3f, ofVec3f, ofVec3f, ofVec3f*)’ defined but not used [-Wunused-function]
static bool intersectRayTriangle(ofVec3f rayOrigin, ofVec3f rayDir, ofVec3f t0, ofVec3f t1, ofVec3f t2, ofVec3f* intersection=NULL)
^
/home/pi/openFrameworks/apps/myApps/Magic-Sand/src/KinectProjector/Utils.h:372:20: warning: ‘ofVec4f ofxCSG::plane_from_points(ofVec3f*, int)’ defined but not used [-Wunused-function]
static ofVec4f plane_from_points(ofVec3f* points, int n) {
^
/home/pi/openFrameworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:200: recipe for target 'obj/linuxarmv6l/Release/src/vehicle.o' failed
make[1]: *** [obj/linuxarmv6l/Release/src/vehicle.o] Error 1
make[1]: Leaving directory '/home/pi/openFrameworks/apps/myApps/Magic-Sand'
/home/pi/openFrameworks/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk:125: recipe for target 'Release' failed
make: *** [Release] Error 2


I double check the ofxCV installation, and the libglm-dev and everything seems ok...

Any idea ?

Screenshots or photos

The project looks awesome ! Any chance of getting screenshots or photos in the README to give an visual idea behind the descriptions ?

Calibration Issue

I'm trying to run magic sand on a MS Surface Pro 4 running Windows 10 AU. Driver installs worked fine and everything is connected as it should be.

When the calibration runs, the solid white window that I assume is meant to fill the secondary (projector) display appears as a small rectangle within the main device screen (not full screen on the projector). The calibration process starts and I see the 'calibrating depth of field' or similar message flash up quickly, but this then disappears and kicks me out to the main screen. Here's what the early calibration screen looks like when I take a full screen snip (includes main display and projector display extended to the right):

desktop

I have the projection settings set to 'extend' the display to the projector. It seems like there is some issue with the program correctly detecting the position of the secondary (projector) screen?

Really keen to get this working - let me know if there's anything else I can provide.

Calibration

Everything seems to be working fine but when i do the auto calibration it gets stuck and doesn't do anything. Aby sugestions ?

Calibration and games text display questions

Hi! We built a sandbox installation running the original SARndbox software some years back, and last week I added a Windows drive and your software so we could dual boot to the different versions, and get rain/lava/etc. with the original, and the games and easier calibration with yours. Your software is great, but I have two questions:

First, after calibration, is it supposed to be saving the calibration settings, or is there a way to do that? With SARndbox the calibration gets saved so that we usually only have to do it again when the installation gets moved, but with Magic Sand we have to do it again every time the computer gets turned on/software gets started up.

Second, with the games, the text is displaying upside down from the point of view of people standing in front of the unit. Is there a way to change this? Selecting "DRAW FLIPPED" makes the animals go backward rather than changing where/how the text is drawn. Looking at your photo https://i.imgur.com/93gQ10f.jpg the difference between your setup and ours is that you have the Kinect kind of "upside down" compared to the projector, but ours has the same orientation for both. And looking on the SARndbox site, huh, theirs also has the orientation you're using. But as people dig around in the sand the topographical map displays correctly on ours with both SARndbox and Magic Sand, so now I'm confused ... :-)

Run without Setup mode

There is way to start Magic-Sand in "Run mode"? Without Setup screen? When all calibration is done already. Also is the way to run with predefined number of rabbits and fishes?

libusb0.dll Windows 10

I downloaded the Win version and tried to run it on my AMD x64 PC. I get "The program can't start because libusb0.dll is missing from your computer. Try reinstalling the program to fix this problem".

I googled around and found this repo - https://github.com/openframeworks/openFrameworks/tree/master/addons/ofxKinect/libs/libfreenect/platform/windows/inf/xbox%20nui%20camera. Tried placing the amd64 version of the dll into the Magic-Sand path and got a different error - "The application was unable to start correctly (0xc000007b)".

Do you know what could be missing from my configuration that might help? i have the C++ redistributable and the Kinect runtimes installed.

will this work with windows 10?

I downloaded this folder and tried to run the software. I get an error message that VCOMP120.DLL is missing. Searched the net found and installed a copy in the folder. now I get an error that the application was unable to start correctly (0xc000007b)

OpenGL

I made it through a few errors, one being I had to use the x86 version of the Visual C++ software instead of the 64 bit version. I'm getting stuck on these two errors in a command window before the Magic Sand program crashes.

[ error ] ofAppGLFWWindow: 65542: WGL: The driver does not appear to support OpenGL
[ error ] ofAppGLFWWindow: couldn't create GLFW window

I was going to use an older laptop for this project. Do I need something that supports OpenGL?

UPDATE:
I never installed the graphics card drivers on this laptop. I barely use it so the default Windows 7 x64 drivers were fine. The errors went away after installing the ATI Catalyst software.

Setup mode

Is it possible to save calibration? After the application is closed I have to re calibrate each time.

kinect calibration - massive reprojector error

Hi - i'm running on macOSX High Sierra from the unpacked MacOS folder terminal instance on MacAir.

The viewer appears to run perfectly fine and first stage (low) calibration works well (lots of overlapping kinect reference chessboards though) but at the second stage it completes fine, then returns a projection error value which is in the hundreds.

I've run this with Kinect1 and Windows kinect with a cheapish projector and high-end benq as recommended by ARSandbox-original.

As i'm running it from down in the folder structure, debug isn't writing out to the data folder.

Aside from recompiling for high sierra (which I have no expertise in doing) I cannot think of anything more to try.

I'd planned to use this for an engagement event with children but zero hour is fast approaching so i'm hopeful of suggestions, please.

New version of Sandbox application - what to do in Github?

Hi,
I have now created an application based on Magic-Sand. There is a significant amount of changes. While I do believe that some of the improvements are usable in Magic-Sand I also think that not all features will/should find their way back into Magic-Sand.

I would like to put it back on Github but I am in doubt about how since I am not experienced in Github or the etiquette here. I see two approaches:

  1. I fork Magic-Sand, rename the fork to DuneGames, add my files and deletes unused files.
  2. I create a new repo and put DuneGames there, while stating clearly where it is derived from.

Personally, I prefer option 1) to keep in touch with the Magic-Sand original.

Let me know what you recommend. If you prefer direct conversation I can be reached at
rapa at dtu dot dk

Best,
Rasmus

Major differences between DuneGames and Magic Sand

  • Different application logic
  • DuneGames starts in a setup-mode to make sure the Kinect is running before anything else is done (due to major USB related issues on Windows)
  • Disabled auto-ROI detection (due to major stability issues)

  • Added mouse based point and drag ROI selection

  • Added temporal filtering to RGB image stream to avoid rolling-shutter effects

  • Updated chessboard calibration procedure

  • Added a lot of Debug checks and posibility to dump debug images

  • computes reprojection error to see if the overall calibration is valid
  • Added a status-GUI panel to see if the kinect is running and so on

  • Several GUI related changes

  • Broke the style-convention in particular scope styles

  • Added a complete "shape an Island" game

  • Changed the name of the application to DuneGames and created new icon

  • Build files for Windows enables Win64 builds (VS 2015)

  • Did not update Mac build files

Slow down the rampant rabbits

Excellent software (though the config seems a bit of black art as I've detailed in one of the issues below)

Is there a way of slowing down the rabbits and fish? Ours zoom across the screen so incredibly fast it's almost impossible to catch them.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.