123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- using System;
- using UnityEngine;
- namespace UnityStandardAssets.ImageEffects
- {
- [ExecuteInEditMode]
- [RequireComponent (typeof(Camera))]
- class PostEffectsHelper : MonoBehaviour
- {
- void OnRenderImage (RenderTexture source, RenderTexture destination)
- {
- Debug.Log("OnRenderImage in Helper called ...");
- }
- static void DrawLowLevelPlaneAlignedWithCamera (
- float dist ,
- RenderTexture source, RenderTexture dest ,
- Material material ,
- Camera cameraForProjectionMatrix )
- {
- // Make the destination texture the target for all rendering
- RenderTexture.active = dest;
- // Assign the source texture to a property from a shader
- material.SetTexture("_MainTex", source);
- bool invertY = true; // source.texelSize.y < 0.0f;
- // Set up the simple Matrix
- GL.PushMatrix();
- GL.LoadIdentity();
- GL.LoadProjectionMatrix(cameraForProjectionMatrix.projectionMatrix);
- float fovYHalfRad = cameraForProjectionMatrix.fieldOfView * 0.5f * Mathf.Deg2Rad;
- float cotangent = Mathf.Cos(fovYHalfRad) / Mathf.Sin(fovYHalfRad);
- float asp = cameraForProjectionMatrix.aspect;
- float x1 = asp/-cotangent;
- float x2 = asp/cotangent;
- float y1 = 1.0f/-cotangent;
- float y2 = 1.0f/cotangent;
- float sc = 1.0f; // magic constant (for now)
- x1 *= dist * sc;
- x2 *= dist * sc;
- y1 *= dist * sc;
- y2 *= dist * sc;
- float z1 = -dist;
- for (int i = 0; i < material.passCount; i++)
- {
- material.SetPass(i);
- GL.Begin(GL.QUADS);
- float y1_; float y2_;
- if (invertY)
- {
- y1_ = 1.0f; y2_ = 0.0f;
- }
- else
- {
- y1_ = 0.0f; y2_ = 1.0f;
- }
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, z1);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, z1);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, z1);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, z1);
- GL.End();
- }
- GL.PopMatrix();
- }
- static void DrawBorder (
- RenderTexture dest ,
- Material material )
- {
- float x1;
- float x2;
- float y1;
- float y2;
- RenderTexture.active = dest;
- bool invertY = true; // source.texelSize.y < 0.0ff;
- // Set up the simple Matrix
- GL.PushMatrix();
- GL.LoadOrtho();
- for (int i = 0; i < material.passCount; i++)
- {
- material.SetPass(i);
- float y1_; float y2_;
- if (invertY)
- {
- y1_ = 1.0f; y2_ = 0.0f;
- }
- else
- {
- y1_ = 0.0f; y2_ = 1.0f;
- }
- // left
- x1 = 0.0f;
- x2 = 0.0f + 1.0f/(dest.width*1.0f);
- y1 = 0.0f;
- y2 = 1.0f;
- GL.Begin(GL.QUADS);
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
- // right
- x1 = 1.0f - 1.0f/(dest.width*1.0f);
- x2 = 1.0f;
- y1 = 0.0f;
- y2 = 1.0f;
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
- // top
- x1 = 0.0f;
- x2 = 1.0f;
- y1 = 0.0f;
- y2 = 0.0f + 1.0f/(dest.height*1.0f);
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
- // bottom
- x1 = 0.0f;
- x2 = 1.0f;
- y1 = 1.0f - 1.0f/(dest.height*1.0f);
- y2 = 1.0f;
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
- GL.End();
- }
- GL.PopMatrix();
- }
- static void DrawLowLevelQuad ( float x1, float x2, float y1, float y2, RenderTexture source, RenderTexture dest, Material material )
- {
- // Make the destination texture the target for all rendering
- RenderTexture.active = dest;
- // Assign the source texture to a property from a shader
- material.SetTexture("_MainTex", source);
- bool invertY = true; // source.texelSize.y < 0.0f;
- // Set up the simple Matrix
- GL.PushMatrix();
- GL.LoadOrtho();
- for (int i = 0; i < material.passCount; i++)
- {
- material.SetPass(i);
- GL.Begin(GL.QUADS);
- float y1_; float y2_;
- if (invertY)
- {
- y1_ = 1.0f; y2_ = 0.0f;
- }
- else
- {
- y1_ = 0.0f; y2_ = 1.0f;
- }
- GL.TexCoord2(0.0f, y1_); GL.Vertex3(x1, y1, 0.1f);
- GL.TexCoord2(1.0f, y1_); GL.Vertex3(x2, y1, 0.1f);
- GL.TexCoord2(1.0f, y2_); GL.Vertex3(x2, y2, 0.1f);
- GL.TexCoord2(0.0f, y2_); GL.Vertex3(x1, y2, 0.1f);
- GL.End();
- }
- GL.PopMatrix();
- }
- }
- }
|