Unity 로 이걸 할라 하니 이래저래 삽질이 있었다.
적당히 구글링 해보니 Texture 를 Texture2D.ReadPixel 을 이용해서 Texture2D로 읽는 팁이 있었는데,
막상 해보니 그리는 프레임에 이걸 하면 동작하지 않는다.
좀 멀리 돌아온 감이 있는데,
텍스쳐를 렌더 텍스쳐로 바꾸고 이걸 텍스쳐2D로 만든 다음에 Colors32를 들고 오면 된다.
하루종일 삽질한 것 치고 우아하지 않아서 고민하다가..
지쳐서 그냥 이쯤에서 마무리.
C#으로는 한계가 있는 느낌.. 하아...
private Texture2D _texture2D;
private Texture _mainTexture;
private RenderTexture _renderTexture;
public Color32[] getTexture2D_AsPixel32()
{
if (_mainTexture == null)
_mainTexture = _liveCamera.OutputTexture;
if (_texture2D == null)
{
_texture2D = new Texture2D(_mainTexture.width, _mainTexture.height, TextureFormat.RGBA32, false);
}
//RenderTexture currentRT = RenderTexture.active;
if (_renderTexture == null)
_renderTexture = new RenderTexture(_mainTexture.width, _mainTexture.height, 32);
// mainTexture 의 픽셀 정보를 renderTexture 로 카피
Graphics.Blit(_mainTexture, _renderTexture);
// renderTexture 의 픽셀 정보를 근거로 texture2D 의 픽셀 정보를 작성
RenderTexture.active = _renderTexture;
_texture2D.ReadPixels(new Rect(0, 0, _renderTexture.width, _renderTexture.height), 0, 0);
_texture2D.Apply();
return _texture2D.GetPixels32();
}
RenderTexture 에서는 _texture2D.ReadPixels 을 바로 할 수 있는게 팁..
답글삭제