Library for skeleton joint extraction with Kinect - c++

I've done a few things with the Microsoft Research Kinect SDK. Getting the skeleton is super-easy and I'd like to do something similar in the context of a commercial project.
What is the best C++ library that is available today (even if that's not free / open source)?

Microsoft has published a commercial version of Kinect SDK here.

OpenNI + NITE seems to be an option but I could not find any explicit mention of commercial usage on the website.

Related

Why d3dx is deprecated?

I'm very new to DirectX, and learning it only for a week. A collection of powerful lessons I found and learn from is braynzarsoft d3d12 lessons. It's very difficult, there is a lot of information, but this is what I like.
The lessons seems to be unfinished, and I decided to search through the Internet on how to make a sphere, maybe there is ready vertices matrix, or some algorithm that will describe the sphere's vertices. I found this question, where one person says that what I am doing is actually deprecated and now I should program using the DirectX Tool Kit.
I am really confused - I am doing really well, yet all my code works perfectly, and as far as I want.
Can somebody, who has experience in DirectX programming, explain to me why what I am doing is deprecated, what I should do in general, and where I can get sphere vertices?
Currently, I wrote simple vertex and pixel shaders, initialized a d3d12 device, swap chain, command list, described vertices for a quad, and wrote a class that can add, move, rotate and scale cubes, which I do in an Update() call, before UpdatePipeline().
My try
In DirectxTK there is a function D3DXCreateSphere that has LPD3DXMESH *ppMesh and LPD3DXBUFFER *ppAdjacency interfaces as the output arguments. Perhaps, I can get vertex array I need from them. But anyway, I don’t will it be possible to combine DirectxTK code with my.
The short answer is that as part of the development effort for the Windows 8 SDK (circa 2011), the "DirectX SDK" was migrated into the Windows SDK. The DirectX libraries, headers, and tools were moved into the Windows SDK and the "DirectX SDK" was declared deprecated (i.e. the DirectX SDK June 2010 release was the last one ever made).
Microsoft moved samples online for Windows 8, so the majority of the samples in the DirectX SDK were abandoned in favor of Windows Store/UWP samples. As a personal project, I've put a bunch of the Direct3D 11 samples up on GitHub updated so they only use the Windows SDK.
A number of technologies were left behind in this migration as noted on the Microsoft Docs page.
Direct3D 9 development is considered legacy, and the primary reason for still using it was Windows XP support. The Windows 8 SDK doesn't support Windows XP development--Visual Studio 2012-2017 support Windows XP development by using the Windows 7.1A SDK. If you want to target Direct3D 9, you are basically stuck with using the legacy DirectX SDK--although some engines have enough of their own helper code that they don't really need D3DX9.
Direct3D 10 development is considered legacy. Direct3D 11 is a strict super-set of Direct3D 10, is supported by the same versions of Windows, and the Feature Level mechanism means Direct3D 11 works on more hardware than Direct3D 10 ever did. As such, the helper library D3DX10 is deprecated.
The XACT library was not carried forward. It was created primarily for Xbox 360, so it's been deprecated.
Managed DirectX 1.1 has been deprecated for ages (~2005)
See The Zombie DirectX SDK and Where is the DirectX SDK?
As for what you are supposed to use instead, I have created a number of libraries to replace what was in D3DX9/D3DX10/D3DX11. See Living Without D3DX
For DirectX 12 development, the legacy DirectX SDK never supported it. Samples are on GitHub, and otherwise you are supposed to just use the Windows 10 SDK. I have a version of DirectX Tool Kit for DirectX 12 as well on GitHub. That said, if you are new to DirectX you should really consider starting with DirectX 11.
There is such a thing as D3DX12, but it's not quite the same thing as the older D3DX11 library. D3DX11 had code for loading textures, doing BC compression, etc. and required both a header and a runtime DLL. The only way to ship that DLL with your game was to use the legacy DirectX Setup.
D3DX12 is just a header of some helper functions. There is no DLL and no REDIST. It typically gets copied into a project when you create a DirectX 12 Visual Studio template, and you can download it from GitHub. For more information on D3DX12, see this blog post.
DirectX Tool Kit for DX11 and DX12, DirectXTex, DirectXMesh, DirectXMath, and UVAtlas provide much of what D3DX9, D3DX10, and D3DX11 did but supports both DirectX 11 and DirectX 12. They are all open source, so there's no DLL or REDIST: you just build it yourself from source. They are not "drop-in" replacements, but they provide the same functionality in a more Modern C++ form. They support any C++ program written for classic "Win32" development, Universal Windows Platform (UWP) apps, or Xbox One.
Really this is the primary topic I've been covering in my blog for the past decade. Lots of details there if you want more information on what's been happening.
UPDATE: While using the open source replacements for D3DX9/D3DX10/D3DX11 are still recommended, and easy to adopt for Direct3D 11 or Direct3D 12, there are of course lots of existing tutorials and codebases that use D3DX. To support these scenarios without the messy quirks of trying to use the legacy DirectX SDK with modern Windows SDKs, you can make use of the Microsoft.DXSDK.D3DX NuGet package. Using this package, I was able to republish all of the Direct3D 9 and Direct3D 10 legacy DirectX SDK samples to GitHub.

FMOD audio for my game engine

I'm working on a game engine in C++ and am using Visual Stdio 17 for the project. And for the Music and SFX, I want to use FMOD
I'm having trouble finding the correct tutorial to set it up though. I have installed the FMOD Studio API, but now need to know where do I put in the FMOD libraries.
If someone could help me or point me to the correct tutorial, it'd be nice.
FMOD setup in XCODE and Visual Studio
Also, here's a tutorial I found helpful for setting up a basic Audio Engine using FMOD.

Kinect v2 sample code has undefined C++ headers

I have installed version 2 of Kinect that comes with an integrated developer's toolkit. Problem is that when I load the sample face tracking project (Face Basics D2D), a majority of C++'s own headers like windows.h, string library, strsafe etc come out to be undefined (although all of Kinect's own headers and libraries appear OK). Can you tell me exactly how I am supposed to run that code? What are the steps?
I would be really grateful for your help.
Thanks in advance.
P.S if i write a program myself, then those headers appear defined- completely normal.
Okay, so I finally found the answer:
Kinect v2 is ONLY compatible with visual studio 2013. kinect v1 is compatible with 2010.
Also if anyone wants to interface it with Matlab, you have to know that the support package available at
http://www.mathworks.com/matlabcentral/fileexchange/40445-image-acquisition-toolbox-support-package-for-kinect-for-windows-runtime
is only for v1 of kinect. If you use it with v2, it will detect Kinect as an adaptor but will not recognize its depth and color sensor device IDs. v2 of Kinect is fairly new, and does not have its Matlab interface yet.

Using both OpenNI and OpenNI2 in the same project

Is possible to use both in the same project? actually they have different classes.
I want to do that because OpenNI2 has the driver for Microsoft Kinect, but the library PCL (Point Cloud Libraries) doesn't work yet with this version of OpennI, so i should use the previous version in order to do use them.
However, if there is a better way to use the kinect and, at the same time, use a library capables of meshing a cloud of point, it could be very helpful
ps: I'm using Visual Studio 2010, 32bits, c++
cheers, Maurizio.
As far as I know Nicolas Burrus nestk library supports both, OpenNI and OpenNI2 and also has a PCL integration.
You may want to check the nestk Homepage or nestk on GitHub. Some useful example can be found in the Wiki.
PCL is going to have OpenNI2 grabber. It is being developed and will be merged soon.

Webcam Video Capture using Visual C++ 6.0

I am trying to create an application to capture a snapshot using a webcam.
I have been able to accomplish this using WIA, but this solution becomes unstable when ran on Windows 7 with a camera that has a resolution of more than 1.3 megapixels. We are coding for a tablet computer that has a built in webcam with 2.0 megapixels.
I am not opposed to using direct show, but I would like to stay away from .net.
I have searched high and low for a solution and I can not get the directshow examples from the windows platform sdk or directx 9.0 to even compile on Visual Studio 6.0. I have also had no luck OpenCV.
Is there anyone that could point me in the direction of a tutorial that might get me started down the right path?
Thanks
The simplest way is videoinput lib that wraps directshow, it's the same lib used by openCV.
If that isn't good enough then the AMCAP sample in the multimedia/directshow dir of the Microsoft SDK shows how to run a camera in directshow
ps. as Hans said you should update the compiler,VC++6 is little old. There is a free version of their latest vs2010.
I found this tutorial excellent and it is so simple. I found it worked on XP and win7 with an old webcam and a new one.
I used the second example which is a semi-directshow one, but bypasses most of directshow.
You do need to add error handling though.
http://www.codeproject.com/KB/audio-video/VideoImageGrabber.aspx