这可能是一个简单的问题。作为GLSL的新手,我宁愿在这里问一下。 现在,在顶点着色器中,我可以通过以下方式获取世界坐标系中的位置:
gl_Position = ftransform();
posWorld = gl_ModelViewMatrix * gl_Vertex;
问题是:现在我可以在所有顶点中获得posWorld的最大/最小值吗?这样我就可以获得一个顶点深度范围,但不能获得深度缓冲区的范围。
如果无法做到这一点,如何在世界坐标系中得到近/远平面的z值?
致以最诚挚的问候,
建
答案 0 :(得分:2)
是的,可以使用OpenGL。我正在做类似的技术来计算GPU上的对象边界框。以下是步骤:
您可以从这里进一步优化。例如,您可以通过使用几何着色器并取消其中一个输出像素的位置,在一次绘制调用中获得'min'和'max'。
答案 1 :(得分:1)
据我所知,我认为这需要使用基于并行缩减的算法手动完成。我希望有人确认是否存在已经执行此操作的OpenGL或GLSL函数。
另一方面,您可以访问片段着色器中的规范化近/远平面,
http://www.opengl.org/wiki/GLSL_Predefined_Variables#Fragment_shader_uniforms。
并且在一些统一变量的帮助下,您可以远离/接近世界。