Я использую код Снимка экрана, чтобы сделать снимок экрана, который работает нормально, но он также использует и модели дуги.Есть ли способ сделать скриншот до того, как модели будут отображены?
Я попытался SetActive(false)
, затем сделать снимок экрана, затем SetActive(true)
, он работает, но есть заметная разница, т.е. модель исчезает, а не появляется снова.
Обновление: это сценарий, примененный к ScreenShotCameraи он обновляется после удаления всех ошибок (благодаря @Shingo), не стесняйтесь использовать его, он работает правильно
using GoogleARCore;
using OpenCVForUnitySample;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
[RequireComponent(typeof(Camera))]
public class SnapshotCamera : MonoBehaviour
{
Camera snapCam;
public UnityEngine.UI.Text text;
public RenderTexture mRenderTexture;
int resWidth=480;
int resHeight=800;
// Start is called before the first frame update
public void initialize(ARBackgroundRenderer background, Material material)
{
background = new ARBackgroundRenderer();
snapCam = GetComponent<Camera>();
background.backgroundMaterial = material;
background.camera = snapCam;
background.mode = ARRenderMode.MaterialAsBackground;
if (snapCam.targetTexture == null)
{
snapCam.targetTexture = new RenderTexture(resWidth, resHeight, 24);
}
else
{
snapCam.targetTexture.height = resHeight;
snapCam.targetTexture.width = resWidth;
//resHeight = snapCam.targetTexture.height;
//resWidth = snapCam.targetTexture.width;
}
background.camera.cullingMask = LayerMask.NameToLayer("Default");
//snapCam.CopyFrom(background.camera);
snapCam.gameObject.SetActive(false);
}
public void TakeSnapShot()
{
snapCam.gameObject.SetActive(true);
}
void LateUpdate()
{
if (snapCam.gameObject.activeInHierarchy)
{
snapCam.cullingMask = LayerMask.NameToLayer("Default");
if (ARCoreBackgroundRenderer.screenShot == null)
ARCoreBackgroundRenderer.screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false);
snapCam.Render();
RenderTexture.active = snapCam.targetTexture;
ARCoreBackgroundRenderer.screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0);
ARCoreBackgroundRenderer.screenShot.Apply();
snapCam.gameObject.SetActive(false);
HandPoseRecognition.captureTexture = false;
//string name = string.Format("{0}_Capture{1}_{2}.png", Application.productName, "{0}", System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
//UnityEngine.Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ARCoreBackgroundRenderer.screenShot, Application.productName + " Captures", name));
}
}
}
Возможно, я был немного двусмысленным, то, что вы упомянули в комментарии, уже решеноспасибо тебе но проблема сейчас есть.Я покажу вам изображения: Это две камеры, которые у меня есть: ![enter image description here](https://i.stack.imgur.com/PzkbZ.jpg)
Это то, что показывает моя главная (камера ARCore)
![enter image description here](https://i.stack.imgur.com/u80qQ.png)
И это то, что (ScreenShot Camera) показывает ![enter image description here](https://i.stack.imgur.com/tQcAn.png)