程序员人生 网站导航

Unity3D WebCamTexture 调用外部摄像头

栏目:综合技术时间:2015-05-05 07:54:12

1:Unity 中使用WebCamTexture 调用摄像头实现拍照和摄像。

using UnityEngine; using System.Collections; using System.IO; using System.Runtime.Serialization; using System.Runtime .Serialization.Formatters.Binary; using System.Threading; public class takePhoto : MonoBehaviour { public string deviceName; //接收返回的图片数据 WebCamTexture tex; public Texture2D _tex; void OnGUI() { if (GUI.Button(new Rect(10, 20, 100, 40), "开启摄像头")) { // 调用摄像头 StartCoroutine(start()); } if(GUI.Button(new Rect(10,70,100,40),"捕获照片")) { //捕获照片 tex.Pause(); StartCoroutine(getTexture()); } if(GUI.Button(new Rect(10,120,100,40),"再次捕获")) { //重新开始 tex.Play(); } if(GUI.Button(new Rect(120,20,80,40),"录相")) { //录相 StartCoroutine(SeriousPhotoes()); } if(GUI.Button(new Rect(10,170,100,40),"停止")) { //停止捕获镜头 tex.Stop (); StopAllCoroutines(); } if(tex!=null) { // 捕获截图大小 ―距X左屏距离 | 距Y上屏距离 GUI.DrawTexture(new Rect(Screen.width/2⑴50,Screen.height/2⑴90,280,200),tex); } } /// <summary> /// 捕获窗口位置 /// </summary> public IEnumerator start() { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if (Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamDevice[] devices = WebCamTexture.devices; deviceName= devices[0].name; tex=new WebCamTexture(deviceName,300,300,12); tex.Play(); } } /// <summary> /// 获得截图 /// </summary> /// <returns>The texture.</returns> public IEnumerator getTexture() { yield return new WaitForEndOfFrame(); Texture2D t=new Texture2D(400,300); t.ReadPixels( new Rect(Screen.width/2⑵00,Screen.height/2⑸0,360,300),0,0,false); //距X左的距离 距Y屏上的距离 // t.ReadPixels(new Rect(220, 180, 200, 180), 0, 0, false); t.Apply(); byte[] byt=t.EncodeToPNG(); // File.WriteAllBytes(Application.dataPath+"/Photoes/"+Time.time+".jpg",byt); tex.Play(); } /// <summary> /// 连续捕获照片 /// </summary> /// <returns>The photoes.</returns> public IEnumerator SeriousPhotoes() { while (true) { yield return new WaitForEndOfFrame(); Texture2D t = new Texture2D(400, 300, TextureFormat.RGB24, true); t.ReadPixels(new Rect(Screen.width/2⑴80,Screen.height/2⑸0,360,300), 0, 0, false); t.Apply(); print(t); byte[] byt = t.EncodeToPNG(); // File.WriteAllBytes(Application.dataPath + "/MulPhotoes/" + Time.time.ToString().Split('.')[0] + "_" + Time.time.ToString().Split('.')[1] + ".png", byt); Thread.Sleep(300); } } }


2:Unity 中使用WebCamTexture 设置背景为摄像头画面

1在unity的场景中新建1个Quad作为背景,可以自行调理缩放和位置。

2.新建1个Material文件夹用来寄存Material,在Material里新建1个Material材质,并命名为CamTex。
3.选中CamTex材质,在Inspector面板当选择shader的模式为Unlit/Texture。
4.新建C#脚本,并将其命名为WebCam,双击脚本进行编辑,添加以下代码:
using UnityEngine; using System.Collections; public class WebCam : MonoBehaviour { public string deviceName; WebCamTexture tex; // Use this for initialization IEnumerator Start () { yield return Application.RequestUserAuthorization(UserAuthorization.WebCam); if(Application.HasUserAuthorization(UserAuthorization.WebCam)) { WebCamDevice[] devices = WebCamTexture.devices; deviceName = devices[0].name; tex = new WebCamTexture(deviceName, 400, 300, 12); renderer.material.mainTexture = tex; tex.Play(); } } }


5.将CamWeb脚本和CamTex材质拖到Quad上
6.将Quad调至摄像机正对位置。
7.点击播放按钮便可调用摄像头,在quad的贴图会显示摄像头中的画面。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐