Ручной рендеринг в Unity - PullRequest
       0

Ручной рендеринг в Unity

0 голосов
/ 25 февраля 2020

Я использую Unity 2019.2.13f1. У меня есть следующий код, прикрепленный к камере orthographi c. На сцене только камера, больше ничего.

Когда я бегу, я вижу только серый цвет. Должно быть что-то не так в моем коде. Материал? УФ? Преобразование? Или метод OnPostRender()?

Вот мой код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ManualRendering : MonoBehaviour
{
    private Mesh _quad;
    private Texture2D _texture;
    private Material _material;
    private RenderTexture _renderTexture;

    void Start() {
        MakeQuadMesh();
        MakeTexture();
        MakeMaterial();
        _renderTexture = new RenderTexture(Screen.width, Screen.height, 0, RenderTextureFormat.ARGBFloat);
    }

    void OnPostRender() {
        Graphics.SetRenderTarget(_renderTexture);
        GL.Clear(true, true, Color.gray);
        Graphics.DrawMesh(_quad, Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one), _material, 0);
        Graphics.Blit(_renderTexture, (RenderTexture)null);
    }

    private void MakeQuadMesh() {
        List<Vector3> vertices = new List<Vector3> {
            new Vector3(-0.5f, 0.5f, 0),
            new Vector3(0.5f, 0.5f, 0),
            new Vector3(0.5f, -0.5f, 0),
            new Vector3(-0.5f, -0.5f, 0)
        };
        int[] indices = new int[4] { 0, 1, 2, 3 };
        List<Vector2> uvs = new List<Vector2> {
            new Vector2(0, 0),
            new Vector2(1, 0),
            new Vector2(1, 1),
            new Vector2(0, 1)
        };
        _quad = new Mesh();
        _quad.SetVertices(vertices);
        _quad.SetIndices(indices, MeshTopology.Quads, 0);
        _quad.SetUVs(0, uvs);
    }

    private void MakeTexture() {
        int size = 32;
        _texture = new Texture2D(size, size);
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                int red = (i + j) % 2;
                _texture.SetPixel(i, j, new Color(red, 1, 0));
            }
        }
        _texture.Apply();
    }

    private void MakeMaterial() {
        _material = new Material(Shader.Find("UI/Default"));
        _material.SetTexture("_MainTex", _texture);
    }
}

Если у меня нет камер, у меня только черный экран. Если я его создаю, я вижу только цвет фона камеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...