GUI рендертекстура с альфой [РЕШЕНО]

Шейдеры и все-все-все.

GUI рендертекстура с альфой [РЕШЕНО]

Сообщение Woolf 17 сен 2012, 02:26

Возникла надобность вывести рендертекстуру гуем на экран, но не просто на экран, а еще по альфе, если конкретно - то в виде круга. Какие есть идеи, кроме как использовать плашку с хитрым материалом?
Последний раз редактировалось Woolf 17 сен 2012, 16:53, всего редактировалось 1 раз.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: GUI рендертекстура с альфой

Сообщение Woolf 17 сен 2012, 16:52

Вопрос решен )
Изображение

Кому интересно, даю шейдер, Alphamask - содержит в альфаканале альфамаску:

Синтаксис:
Используется csharp
Shader "Custom/GUICombineAlpha" {

        Properties {
           _AlphaTex ("Alphamask",  2D) = "white"
           _Alpha("Alpha", Float)=1.0
         }
       

SubShader
   {

     Pass
     {
          ZTest Always Cull Off ZWrite Off
                  ColorMask A

                  SetTexture [_Dummy] {
                    constantColor(0,0,0,[_Alpha]) combine constant
                  }            

         SetTexture [_AlphaTex]  {
          combine previous * texture, texture
         }    
     }
   }
}



И скрипт, который вешается на ГО с камерой. Скрипт этот ссылается на некоторые мои другие классы, но там только константы прописаны, ничего сложного..

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

public class PoplCameraTrns : MonoBehaviour
{
        public Material mat;
        private RenderTexture poplTexture = null;
       
        void Start ()
        {
                Camera cam = GetComponent<Camera> ();
                poplTexture = new RenderTexture (GInterfaceSettings.getI.pplCamSize, GInterfaceSettings.getI.pplCamSize, 32, RenderTextureFormat.ARGB32, RenderTextureReadWrite.Default);
                cam.targetTexture = poplTexture;
        }
       
        void OnGUI ()
        {
                if (poplTexture != null) {
                       
                        //Draw texture on GUI
                        int x = Screen.width - GInterfaceSettings.getI.pplCamGUISize - 16;
                        int y = Screen.height - GInterfaceSettings.getI.pplCamGUISize - 16;
                       
                        GUI.DrawTexture (new Rect (x, y, GInterfaceSettings.getI.pplCamGUISize, GInterfaceSettings.getI.pplCamGUISize), poplTexture, ScaleMode.ScaleAndCrop, true);
                        GUI.DrawTexture (new Rect (x, y, GInterfaceSettings.getI.pplCamGUISize, GInterfaceSettings.getI.pplCamGUISize), GameInterface.getI.PoplCameraRamka, ScaleMode.ScaleAndCrop, true);
                }
        }
       
        void OnPostRender ()
        {
                if (poplTexture != null) {
                       
                        Vector2 v1 = new Vector2 (0f, 0f);
                        Vector2 v2 = new Vector2 (poplTexture.width, 0f);
                        Vector2 v3 = new Vector2 (poplTexture.width, poplTexture.height);
                        Vector2 v4 = new Vector2 (0f, poplTexture.height);
               
                        GL.PushMatrix ();
                        GL.LoadPixelMatrix ();
                        mat.SetPass (0);
               
                        GL.Begin (GL.QUADS);
                        GL.Color (new Color (1f, 1f, 1f, 1f));
               
                        GL.TexCoord (new Vector2 (0, 0));
                        GL.Vertex (v1);
               
                        GL.TexCoord (new Vector2 (1f, 0));
                        GL.Vertex (v2);
               
                        GL.TexCoord (new Vector2 (1f, 1f));
                        GL.Vertex (v3);
               
                        GL.TexCoord (new Vector2 (0, 1f));
                        GL.Vertex (v4);
               
                        GL.End ();
                        GL.PopMatrix ();
                }
        }
       
        void OnDestroy ()
        {
                if (poplTexture != null)
                        Destroy (poplTexture);
        }
       
}

 
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в Shader Lab

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1