使用'gl'时是否可以更改每个片段的深度。点坐标'?



我想知道如何调整每个片段的深度值(使用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_FragCoordz组件将设置为深度缓冲区。

通过在顶点着色器中设置gl_Positionz组件,指定了启动的顶点位置的深度(在您的情况下(。如果-gl_Position.w < gl_Position.zgl_Position.z < gl_Position.w,则深度(z组件(在夹子空间中。

通过除以gl_Positionw组件(透视图,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。

相关内容

  • 没有找到相关文章

最新更新