我在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之前执行它自己的剪辑..但这是无稽之谈!