我是xna的新手
我想使用我的网络摄像头并将网络摄像头图像作为3D模型的背景纹理
是否有调用网络摄像头的功能
感谢您的建议
答案 0 :(得分:4)
如果您查看AForge框架,您将找到一个在网络摄像头源上进行运动检测的示例程序。
http://code.google.com/p/aforge/
此框架非常容易获取网络摄像头。
基本上结束了
VideoCaptureDevice device = new VideoCaptureDevice(monikor);
device.NewFrame += new AForge.Video.NewFrameEventHandler(webcam_NewFrame);
webcam.Start();
您可以通过调用与...类似的代码来获取网络摄像头的监视器。
FilterInfoCollection webcamList = new FilterInfoCollection(FilterCategory.VideoInputDevice);
foreach(FilterInfo info in webcamList)
{
string monikor = info.MonikorString;
string deviceName = info.Name;
}
这是我遇到的最好/最简单的方式来获取网络摄像头。
然后你可以将Bitmap转换为Texture2D并按你的意愿显示!
答案 1 :(得分:0)
我不久前遇到了这个问题,这是我提出的一个非常混乱的解决方案。
首先,你需要使用motion_src库,你可以在这里找到:
http://www.codeproject.com/KB/audio-video/Motion_Detection.aspx
该教程是关于运动检测的,但是如果您下载演示代码,您可以将它从摄像机捕获输入的位置。
现在,将其添加为xna项目的参考。
一旦你设置系统从摄像头捕获一个源(所有细节都在该教程中,我不会在这里重复)你需要复制源(它被捕获到System.Drawing中) .bitmap到xna纹理。
Texture2D image;
b = (System.Drawing.Bitmap)camera.LastFrame.Clone();
for (int j = 0; j < image.Height; j++)
{
for (int i = 0; i < image.Width; i++)
{
c = b.GetPixel(i, j);
colours[i + j * image.Width] = new Color(c.R, c.G, c.B, byte.MaxValue);
}
}
image.SetData<Color>(colours);
然后,您可以使用对spritebatch的正常调用来显示图像纹理:)
答案 2 :(得分:0)
您可以使用第三方VideoTexture class。它可以使用网络摄像头或AVI,MPEG或WMV,并允许您访问Texture2D对象,将当前帧作为可与spritebatch一起使用或应用于3D对象的图像。
- 将VideoTexture.cs文件复制到您自己的项目中。
- 将VideoTexture.cs文件中的命名空间更改为 你的项目命名空间。
- 从中添加对DirectShowLib-2005.dll的引用 DirectShow.NET库。
- 编译它。 VideoTexture类现在应该在您的 项目
醇>
我从未使用它,但如果您下载文档,它应该有所帮助。它应该只是创建一个VideoTexture,并使用其VideoTexture2D属性来检索Texture2D。然后你可以将它设置为某个3D对象的每个效果的纹理。