深度检查OpenGL(GLSL)
Depth Checking OpenGL(glsl)
我想知道是否有一种方法知道是否显示了特定像素(例如,我想获得场景背后的所有位置,这意味着所有背景对象未显示在近平面中)。
自己进行一些简单的计算本身可能更快,更容易。例如...
clipSpacePoint = projectionMatrix * viewMatrix * modelMatrix * vec4f(0, 0, 0, 1); //using the model's origin and transform matrix
//or
clipSpacePoint = projectionMatrix * viewMatrix * vec4f(x, y, z, 1); //using the model's position
clipSpacePoint.xyz /= clipSpacePoint.w; //possible division by zero
//point is visible if clipSpacePoint.w is positive and clipSpacePoint.xyz are between -1 and 1
另外,为了更好地回答您的问题,您可以使用遮挡查询检查在拨打电话期间呈现了多少片段。一个示例应用程序可能正在检查是否可见明亮的灯光,并在镜头上绘制镜头耀斑。像许多OpenGL调用一样,遮挡查询不同步,因此,如果您需要立即将渲染管道拖延。如果您不介意等待一两个帧以进行结果,则可能会更快地运行。
- http://www.opengl.org/wiki/query_object#occlusion_queries
这不会告诉您在哪里绘制像素的绘制。发现像素位置的两种方法想到了...
您可以在片段着色器中写入像素坐标为纹理,使用 histopyramid /流压实方法将它们移至纹理的开始,然后从GPU中读取它们。
如果您不介意使用最近的GL功能,则可以在片段着色器中使用ARB_ATOMIC_COUNTR,以创建一个唯一的索引,然后可以使用ARB_IMAGE_LOAD_STORE将片段的坐标写入缓冲区或纹理。您可能还需要为此启用早期深度测试。
这些都比在框检查或遮挡查询中进行点要复杂得多。
相关文章:
- Opengl 3.1 GLSL 140 在 C++ 年输出白色在片段着色器中
- imageLoad glsl 在计算着色器 OpenGL 4.3 中始终返回 0
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- OpenGL GLSL 片段着色器中的随机数
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL,GLSL片段着色器无法读取Sampler2D纹理
- 即使 OpenGL、SDL 和 GLSL 都没有抛出错误,也没有绘制多边形
- 深度检查OpenGL(GLSL)
- 使用 OpenGL/GLSL 1.2 更改纹理色调
- 从 .glsl 文件中读取 OpenGL 着色器语言
- Opengl-glsl 單虛擬光
- 与GLSL相关的OpenGL应用程序代码
- Opengl 3.3 不会绘制任何东西。使用 GLSL 330 内核
- OpenGL 纹理不通过 GLSL 渲染
- OpenGL纹理缓冲区-GLSL语法
- OpenGL和GLSL:灰度纹理不显示
- Opengl/glsl 尝试编写用于绘制四边形的着色器,但不确定如何处理屏幕纵横比的变化
- GLSL OpenGL 多边形未渲染
- 着色器GLSL OpenGL上的投影矩阵问题