我想知道如何调整每个片段的深度值(使用gl_FragDepth
(。我用gl_PointSize=5.0
渲染点原始。
我知道,在片段着色器中,我可以通过gl.pointcoord.xy访问每个片段,但是我未能将不同的深度值重置为每个片段?
任何帮助将不胜感激。
WebGL 1.0中的扩展名EXT_frag_depth
必须被驱动以访问gl_FragDepth
:
- webgl ext_frag_depth khronos批准扩展规范
- 使用webgl中的gl_fragdepth stackoverflow问题
您可以写入片段着色器中的内置均匀out float gl_FragDepth;
。gl_FragDepth
的值设置为深度缓冲区。由于深度是在片段着色器中设置的,它会影响一个片段。
深度的有效范围由glDepthRange
设置。默认情况下,深度范围从0到1。0在附近,1远。
如果未设置gl_FragDepth
,则gl_FragCoord
的z
组件将设置为深度缓冲区。
通过在顶点着色器中设置gl_Position
的z
组件,指定了启动的顶点位置的深度(在您的情况下(。如果-gl_Position.w < gl_Position.z
和gl_Position.z < gl_Position.w
,则深度(z
组件(在夹子空间中。
gl_Position
的w
组件(透视图,BeaCause gl_Position
是均匀的坐标(,将夹子空间坐标坐标转换为归一化的设备空间坐标。因此,z
组件在归一化设备空间的近距离和远面之间,在[-1,1]范围内。
最后,归一化设备空间的z
组件(在[-1,1]中(映射到深度范围,默认情况下为[0,1]。
注意,in mediump vec2 gl_PointCoord
为片段着色器的2维输入变量。你不能写信。
请参阅OpenGL ES阴影语言1.00规格,7.2片段着色器特殊变量,第60页:
片段着色器可以访问仅读取的内置变量GL_PointCoord。
gl_PointCoord
中的值是二维坐标,指示当前片段所在的点内的位置。它们在整个点之间从0.0到1.0。