为什么OpenGL裁剪不丢弃不可见的基元?

时间:2018-07-07 15:04:33

标签: c++ opengl shader

我用c ++语言编写了一个简单的OpenGL程序,该程序可以渲染许多纹理立方体(大约100000个),并具有一些照明效果(基于Phong模型)。

当我将相机移动到看不到任何东西的位置(所有立方体都在相机后面)时,我得到19 FPS。但是,当我用原始着色器(仅返回固定颜色)替换片段着色器并以可见所有多维数据集(或至少其中的大多数多维数据集)的方式移动相机时,我得到了28 FPS,这远不止这些。

我认为应该是相反的,因为在第一种情况下,根本不应该使用片段着色器(由于顶点和片段着色器阶段之间的剪切阶段),而在第二种情况下,必须运行片段着色器很多次。

我的思维方式正确吗?还是必须启用此功能或类似的功能?

我在KDE Neon 5.13上使用OpenGL 3.3核心配置文件。
我的显卡是Radeon HD3470(具有Mesa OpenGL实现)。

编辑(更多测量值):
带有高级着色器的可见多维数据集:15.5 FPS。
带有基本着色器的可见立方体:28-30 FPS。
带有高级着色器的不可见立方体:18 FPS。
具有基本着色器的不可见立方体:36 FPS。

0 个答案:

没有答案