菜鸟在线Unity3d教程:如何获取摄像机图像?
2016-02-27 18:27
483 查看
本文介绍了两种在Unity中获得相机图像的方法:
1.使用image 类
2.使用图像作为OpenGL的纹理
使用image类
使用image类更像是原生版本。
1.注册所需的图像格式使用CameraDevice.SetframeFormat 方法:
CameraDevice.Instance.SetframeFormat(Image.PIXEL_FORMAT.RGB888, true);
2.在QCARBehaviour运行之后调用此方法
使用Unity的脚本排序功能,或在一个更新的回调中做一次。
3.使用CameraDevice.GetCameraImage方法检索图像。
在 ITrackerEventHandler.OnTrackablesUpdated 的回调中执行这样的行为。这样您就可以确保您检索当前帧的最新的摄像机图像。
一定要确保相机的图像不是空的,因为在注册了图像格式之后,图像会在几帧之后才可用。
这里是完整的脚本:
使用OpenGL的纹理
image类提供了一个摄像头像素的字节数组。这种方法对一些图像处理任务是有用的,但有时更好的是作为一个OpenGL纹理来找到它。你可以获得的图像的OpenGL纹理使用范例backgroundtextureaccess 中的方法。
1.注册一个Texture2D对象在每一帧充满摄像头像素,而不是让vuforia渲染相机本身在每一帧渲染图像。
2.看范例中的readme.txt(在assets文件夹)中的两种方式使用这种方法渲染相机图像。
1.使用image 类
2.使用图像作为OpenGL的纹理
使用image类
使用image类更像是原生版本。
1.注册所需的图像格式使用CameraDevice.SetframeFormat 方法:
CameraDevice.Instance.SetframeFormat(Image.PIXEL_FORMAT.RGB888, true);
2.在QCARBehaviour运行之后调用此方法
使用Unity的脚本排序功能,或在一个更新的回调中做一次。
3.使用CameraDevice.GetCameraImage方法检索图像。
在 ITrackerEventHandler.OnTrackablesUpdated 的回调中执行这样的行为。这样您就可以确保您检索当前帧的最新的摄像机图像。
一定要确保相机的图像不是空的,因为在注册了图像格式之后,图像会在几帧之后才可用。
这里是完整的脚本:
using UnityEngine; using System.Collections; public class CameraImageAccess : MonoBehaviour { private Image.PIXEL_FORMAT m_PixelFormat = Image.PIXEL_FORMAT.RGB888; private bool m_RegisteredFormat = false; private bool m_LogInfo = true; void Start() { QCARBehaviour qcarBehaviour = (QCARBehaviour) FindObjectOfType(typeof(QCARBehaviour)); if (qcarBehaviour) { qcarBehaviour.RegisterTrackablesUpdatedCallback(OnTrackablesUpdated); } } public void onTrackablesUpdated() { if (!m_RegisteredFormat) { CameraDevice.Instance.SetframeFormat(m_PixelFormat, true); m_RegisteredFormat = true; } if (m_LogInfo) { CameraDevice cam = CameraDevice.Instance; Image image = cam.GetCameraImage(m_PixelFormat); if (image == null) { Debug.Log(m_PixelFormat + " image is not available yet"); } else { string s = m_PixelFormat + " image: \n"; s += " size: " + image.Width + "x" + image.Height + "\n"; s += " bufferSize: " + image.BufferWidth + "x" + image.BufferHeight + "\n"; s += " stride: " + image.Stride; Debug.Log(s); m_LogInfo = false; } } } }
使用OpenGL的纹理
image类提供了一个摄像头像素的字节数组。这种方法对一些图像处理任务是有用的,但有时更好的是作为一个OpenGL纹理来找到它。你可以获得的图像的OpenGL纹理使用范例backgroundtextureaccess 中的方法。
1.注册一个Texture2D对象在每一帧充满摄像头像素,而不是让vuforia渲染相机本身在每一帧渲染图像。
2.看范例中的readme.txt(在assets文件夹)中的两种方式使用这种方法渲染相机图像。
相关文章推荐
- Unity3D游戏开发之MatchTarget实现角色攀爬效果
- Unity3D游戏开发之ACT游戏三连击效果实现综述
- Unity3D游戏开发之从《魂斗罗》游戏说起(上)——目标追踪
- Unity3D游戏开发之在3D场景中选择物体并显示轮廓效果强化版
- Unity3D游戏开发之《愤怒的小鸟》弹弓实现的技能培训
- Unity3D游戏开发之如何截屏的技能培训
- Unity3D游戏开发之Lua的技能培训
- UNITY3D, UNITY3D游戏开发, UNITY3D游戏定制, UNITY3D游戏外包,UNI
- UNITY3D, UNITY3D游戏开发, UNITY3D游戏定制, UNITY3D游戏外包,UNI
- UNITY3D游戏开发, UNITY3D游戏定制
- Unity3D射击游戏-UNITY3D软件开发、游戏开发、UNITY3D游戏开发
- 水果达人-iPhone游戏开发 iPhone软件外包 iOS软件定制 iOS编程开发 App外包
- 喜羊羊吹泡泡-UNITY软件外包、UNITY3D软件开发、UNITY3D游戏开发
- Unity3D射击游戏-UNITY软件外包、UNITY3D软件开发、UNITY3D游戏开发
- 水滴游戏视频-UNITY软件外包、UNITY3D软件开发、UNITY3D游戏开发
- unity3D 整合 vs2008 加快 unity c# 开发
- unity游戏开发 发布android 游戏
- Unity3D射击游戏-游戏开发、UNITY3D游戏开发、UNITY3D软件开发
- unity3d游戏制作入门教程
- unity3d-carwaypoints插件优点