Перенос изображения камеры в текстуру

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Перенос изображения камеры в текстуру

Сообщение MUGIK 22 окт 2014, 00:14

В общем хочу сделать снайперский прицел, и дабы сделать линзу реалистичней хочу перенести изображение отдельной камеры в текстуру, а затем текстуру в материал линзы.
У меня возникли две проблемы:
1. При работе моего скрипта юнити начинает просто пожирать мою оперативу до 3,5 гигов!!!!! у меня всего то 4(((((((
2. Как сделать чтобы ReadPixels брал скрин именно с той камеры, которая мне нужна? ибо у меня изображение берется с маин камера, а камера которая нужна находится на самой оптике.
А вот и сам про скрипт от про скриптингера:
Синтаксис:
Используется csharp
void Start ()
        {
                camera.enabled = false;
                camera.enabled = true;
                tileSizeX = (int)camera.pixelWidth;
                tileSizeY = (int)camera.pixelHeight;
                screen = new Texture2D(tileSizeX, tileSizeY, TextureFormat.ARGB32, true);
                renderer.material.mainTexture = screen;
        }

        void Update ()
        {
                camera.enabled = true;

                screen = new Texture2D(tileSizeX, tileSizeY, TextureFormat.ARGB32, true);

                StartCoroutine(Screenshot(screen, tileSizeX, tileSizeY, tileSizeX, tileSizeY));
                camera.enabled = false;
                //renderer.material.mainTexture = screen;
        }

        System.Collections.IEnumerator Screenshot(Texture2D tex, int tileWidth, int tileHeight, int destX, int destY)
        {      
                // Read pixels to buffer location
                yield return new WaitForEndOfFrame();
                camera.enabled = true;
                tex.ReadPixels(new Rect(0, 0, tileWidth, tileHeight), 0, 0);
                tex.Apply();
                renderer.material.mainTexture = tex;
                 //Copy pixels to dest in buffer
//              Color background = camera.backgroundColor;
//              Color alpha = background; alpha.a = 0.0f;
//              for(int y = 0; y < tileHeight; y++)
//                      for(int x = 0; x < tileWidth; x++)
//              {
//                      Color c = tex.GetPixel(x,y);
//                      if (c.r == background.r && c.g == background.g && c.b == background.b)
//                              tex.SetPixel(x + destX, y + destY, alpha);
//                      else
//                              tex.SetPixel(x + destX, y + destY, c);
//              }
               
                 //Clear buffer data
//              Color background = camera.backgroundColor;
//              Color alpha = background; alpha.a = 0.0f;
//              for(int y = 0; y < tileHeight; y++)
//                      for(int x = 0; x < tileWidth; x++)
//                              tex.SetPixel(x,y, alpha);
                //camera.enabled = false;
                //tex.Apply();
        }
}
 


вы пожалуста не пугайтесь от моего скила, но часть кода в коментах была с готового скрипта, но его работа мне не подходит. Но если это наведет вас, чтобы вы навели меня на путь истины , то пусть останется...
и скрипт не работает после попытки решения проблемы с оперативой, но оператива так и кушается(

ну а так скрипт по идее простяковый, но походу не для меня((((
MUGIK
UNец
 
Сообщения: 25
Зарегистрирован: 23 июл 2014, 17:51

Re: Перенос изображения камеры в текстуру

Сообщение DonTTGnev 22 окт 2014, 00:59

Не совсем понимаю логику камеру включил,а не выключил, а не включил а не опять выключил. в Update() вы создаете новый материал Оо каждый кадр. Мусоршик за вами не успеет. Создай функцию инициализации материала один раз, примени для линзы когда нужно и все. Пугаент название метода (Screenshot) явно не то взяли за основу...
DonTTGnev
UNIт
 
Сообщения: 126
Зарегистрирован: 10 сен 2014, 17:55

Re: Перенос изображения камеры в текстуру

Сообщение Tolking 22 окт 2014, 01:31

Нормально это можно сделать только на про.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2715
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Перенос изображения камеры в текстуру

Сообщение MUGIK 22 окт 2014, 19:09

хорошо, я понял о чем вы
но все же как сделать чтобы ReadPixels считывал именно с нужной мне камеры а не с главной(основной)?
MUGIK
UNец
 
Сообщения: 25
Зарегистрирован: 23 июл 2014, 17:51

Re: Перенос изображения камеры в текстуру

Сообщение LoneRay 24 ноя 2018, 05:29

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewImage : MonoBehaviour
{
    public Camera camera;
    private int tileSizeX;
    private int tileSizeY;
    private Texture2D screen;
    void Start()
    {
        tileSizeX = (int)camera.pixelWidth;
        tileSizeY = (int)camera.pixelHeight;
        screen = new Texture2D(tileSizeX, tileSizeY, TextureFormat.ARGB32, true);
    }

    void Update()
    {
        StartCoroutine(Screenshot(screen, tileSizeX, tileSizeY));
    }

    System.Collections.IEnumerator Screenshot(Texture2D tex, int tileWidth, int tileHeight)
    {
        yield return new WaitForEndOfFrame();
        tex.ReadPixels(new Rect(0, 0, tileWidth, tileHeight), 0, 0);
        tex.Apply();
        GetComponent<Renderer>().material.mainTexture = tex;
    }
}
 
«Нужно делать так, как нужно. А как не нужно, делать не нужно!»
Аватара пользователя
LoneRay
UNец
 
Сообщения: 49
Зарегистрирован: 11 июн 2016, 11:31


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 30