[英]Microsoft HoloLens image capture not working
I am trying to capture an image using HoloLens.我正在尝试使用 HoloLens 捕获图像。 I accept the permission to use the HoloLens camera.我接受使用 HoloLens 相机的许可。
I am using this code我正在使用此代码
using UnityEngine;
using System.Collections;
using System.Linq;
using UnityEngine.XR.WSA.WebCam;
using UnityEngine.UI;
public class WebCamera : MonoBehaviour
{
PhotoCapture photoCaptureObject = null;
Texture2D targetTexture = null;
// Use this for initialization
void Start()
{
Resolution cameraResolution = PhotoCapture.SupportedResolutions.OrderByDescending((res) => res.width * res.height).First();
targetTexture = new Texture2D(cameraResolution.width, cameraResolution.height);
// Create a PhotoCapture object
PhotoCapture.CreateAsync(false, delegate (PhotoCapture captureObject) {
photoCaptureObject = captureObject;
CameraParameters cameraParameters = new CameraParameters();
cameraParameters.hologramOpacity = 0.0f;
cameraParameters.cameraResolutionWidth = cameraResolution.width;
cameraParameters.cameraResolutionHeight = cameraResolution.height;
cameraParameters.pixelFormat = CapturePixelFormat.BGRA32;
// Activate the camera
photoCaptureObject.StartPhotoModeAsync(cameraParameters, delegate (PhotoCapture.PhotoCaptureResult result) {
// Take a picture
photoCaptureObject.TakePhotoAsync(OnCapturedPhotoToMemory);
});
});
}
void OnCapturedPhotoToMemory(PhotoCapture.PhotoCaptureResult result, PhotoCaptureFrame photoCaptureFrame)
{
// Copy the raw image data into the target texture
photoCaptureFrame.UploadImageDataToTexture(targetTexture);
// Create a GameObject to which the texture can be applied
GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
Renderer quadRenderer = quad.GetComponent<Renderer>() as Renderer;
quadRenderer.material = new Material(Shader.Find("Custom/Unlit/UnlitTexture"));
quad.transform.parent = this.transform;
quad.transform.localPosition = new Vector3(0.0f, 0.0f, 3.0f);
quadRenderer.material.SetTexture("_MainTex", targetTexture);
// Deactivate the camera
photoCaptureObject.StopPhotoModeAsync(OnStoppedPhotoMode);
}
void OnStoppedPhotoMode(PhotoCapture.PhotoCaptureResult result)
{
// Shutdown the photo capture resource
photoCaptureObject.Dispose();
photoCaptureObject = null;
}
}
This script was attached to an empty game object.此脚本附加到一个空游戏 object。
I am getting the following error我收到以下错误
ArgumentNullException: Value cannot be null
Parameter name: shader.UnityEngine.Material..ctor(UnityEngine.Shader shader) (at <00000000000000000000>:0)
Please can anyone help to capture an image.请任何人都可以帮助捕获图像。 Where did I go wrong?我在哪里 go 错了?
It's looking for a shader located here, "Custom/Unlit/UnlitTexture".它正在寻找位于此处的着色器,“Custom/Unlit/UnlitTexture”。 Which may be unavailable.这可能不可用。 I'd suggest commenting out that line to determine if the other code around it works.我建议注释掉该行以确定它周围的其他代码是否有效。
You have to make 2 changes:您必须进行 2 项更改:
in Unity Editor, Edit > Project Settings > Graphics > to the list "Always included shaders", Add "Unlit/Texture"在 Unity 编辑器中,编辑 > 项目设置 > 图形 > 到列表“始终包含的着色器”,添加“无光照/纹理”
Update the line in the code to Shader.Find("Unlit/Texture");将代码中的行更新为 Shader.Find("Unlit/Texture");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.