Unity相机剪辑

时间:2016-08-12 14:16:19

标签: unity3d graphics glsl shader clip

我在Unity中创建了一个正交相机并尝试渲染四边形。这是一个着色器:

Shader "TestShader"
{
    Properties
    {
    }

    SubShader
    {
        Pass
        {
            GLSLPROGRAM
            #include "UnityCG.glslinc"

            #ifdef VERTEX

            void main()
            {
                gl_Position = gl_Vertex;
            }

            #endif

            #ifdef GEOMETRY

            layout(triangles) in;
            layout(triangle_strip, max_vertices = 15) out;

            void main()
            {
                gl_Position = vec4(-1, -1, 0, 1); EmitVertex();
                gl_Position = vec4(-1, 1, 0, 1); EmitVertex();
                gl_Position = vec4(1, 1, 0, 1); EmitVertex();
                EndPrimitive();

                gl_Position = vec4(-1, -1, 0, 1); EmitVertex();
                gl_Position = vec4(1, 1, 0, 1); EmitVertex();
                gl_Position = vec4(1, -1, 0, 1); EmitVertex();
                EndPrimitive();
            }


            #endif

            #ifdef FRAGMENT

            void main()
            {
                gl_FragColor = vec4(0.5);
                gl_FragDepth = 0.5;
            }

            #endif

            ENDGLSL
        }
    }
}

因此,我希望这款相机能够始终以灰色填充所有屏幕空间,与四边形在世界空间中的位置无关。

但看起来,如果世界空间中的四边形不在(camera.nearClipPlane,camera.farClipPlane)剪裁平面之内,我在屏幕上看不到任何内容。

我总是在几何着色器中设置z坐标= 0(标准化设备坐标)!似乎Unity在将顶点发送到OpenGL之前执行它自己的剪辑..但这是无稽之谈!

0 个答案:

没有答案