Domanda

Sto usando questo codice per creare una trama2D dalla rendaTexture di tutte le telecamere.

Codice:

    var w = 256;
    var h = 256;
    var  cameras:Camera[] = Camera.allCameras;

    var renderTexture:RenderTexture = RenderTexture.GetTemporary(Screen.width, Screen.height, 24);
    RenderTexture.active = renderTexture;  

    for (var camera:Camera in cameras)
    {
        if (camera.enabled)
        {
            var fov:float = camera.fov;
            camera.targetTexture = renderTexture;
            camera.Render();
            camera.targetTexture = null;
            camera.fov = fov;
        }
    }

    var result:Texture2D = new Texture2D(w, h, TextureFormat.ARGB32, false);
    result.ReadPixels(Rect(0.0f, 0.0f, Screen.width, Screen.height), 0, 0, false);
    result.Apply();


    Application.ExternalCall("exportImage",System.Convert.ToBase64String(result.EncodeToPNG()));
.

funziona direttamente sul webplayer, ma quando si tenta di convertire questa trama2D su base64 e inviare al browser (da esternoCall ()) il risultato è un'immagine semitrasparente grigia.

Qualsiasi aiuto sarebbe molto apprezzato!Grazie.

È stato utile?

Soluzione

Sono stato in grado di pubblicare uno screenshot a WebPlayer con:

using UnityEngine;
using System.Collections;

public class ScreenshotTest : MonoBehaviour {

    void Update () {
        if(Input.GetKeyDown(KeyCode.Space))
            StartCoroutine(Run());
    }


    IEnumerator Run() {
        yield return new WaitForEndOfFrame();

        Texture2D tex = new Texture2D(Screen.width, Screen.height);
        tex.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
        tex.Apply();

        // to test the texture
        //  renderer.material.mainTexture = tex;

        // to save it as file, not available in webplayer
        //  System.IO.File.WriteAllBytes(Application.streamingAssetsPath+"/png.png", tex.EncodeToPNG());

        Application.ExternalCall("screenshot", System.Convert.ToBase64String(tex.EncodeToPNG()));
    }

}
.

e sul lato del browser:

function screenshot(base64) {
    console.log(base64);
    var img=document.createElement("img");
    img.alt="screenshot";
    img.src="data:image/png;base64,"+base64;
    document.body.appendChild(img);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top