我想部分渲染一个3D场景,我的意思是我想渲染一些像素并跳过其他像素。有许多非实时渲染器允许选择要渲染的部分。
示例,完全渲染的图像(渲染的所有像素)与部分渲染的对象:
我想让渲染器不渲染场景的一部分,在这种情况下,渲染器会跳过渲染这些区域并节省资源(内存/ CPU)。
如果在OpenGL中无法做到,有人可以推荐任何其他开源渲染器,它甚至可以是软件渲染器。
答案 0 :(得分:2)
如果您正在谈论渲染显示的矩形子部分,您可以使用glViewport
并适当调整投影。
如果您想决定是否渲染每个像素,特别是使用纯固定管道,您可能会使用模板缓冲区。这就是名字所说的 - 你画的就好像通过模板喷涂一样。它是一个每像素的掩码,可靠地至少每像素8位,并且至少在过去的十五年里一直支持硬件。在其他用途中,它曾经是如何在不支付官方支持的{专业'卡glStipple
的情况下渲染一个点画。
使用GLSL还有discard
语句,它立即结束片段的处理并且不产生输出。主要的警告是,在一些GPU上 - 特别是嵌入式GPU - 建议更喜欢返回alpha为0的任何颜色(假设根据你的混合模式没有效果),如果你可以通过这样做来避免条件。条件和discard
否则会对并行性产生很大的负面影响,因为片段着色器通常由同时执行多个像素的SIMD单元实现,因此任何时候着色器程序看起来可能会发散,可能会[可能不必要]分裂任务。虽然非常依赖GPU,但一定要在现实生活中进行描述。
编辑:正如评论中指出的那样,使用剪刀矩形比调整视口更聪明。这两者意味着您无需调整投影,同样,任何调整中的舍入误差都不会产生接缝。
让我印象深刻的是,使用模板进行严格的二进制测试的替代方法是在不想重绘的像素上使用最接近的可能值预先填充z缓冲区;使用颜色蒙版仅绘制到深度缓冲区。
答案 1 :(得分:0)
您可以拆分场景并将其部分渲染 - 这样您将以较少的内存消耗进行渲染,您可以简单地跳过不必要的部分或区域。 Also read this