Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 呈现调用对性能的影响_C++_Opengl - Fatal编程技术网

C++ 呈现调用对性能的影响

C++ 呈现调用对性能的影响,c++,opengl,C++,Opengl,考虑一种情况 案例1:我调用opengl通过绘制所有多边形来绘制世界。因此,将根据所有对象的存在来绘制所有多边形。(考虑所有平移和旋转) 案例2:我将只允许绘制相机视野(FOV)内的多边形。显然,渲染的需求会减少。但要求检查多边形是否在FOV中,每个多边形的FOV都会增加 所以我的问题是:哪种情况(方法)更适合考虑对性能的影响? 我的想法:由于在案例2中调用的数量将增加一倍(计算多边形是否在FOV中+调用渲染),我认为第二种情况会很慢。如果我不正确,请纠正我 我标注了C++如果语言事项技巧是不检

考虑一种情况

案例1:我调用opengl通过绘制所有多边形来绘制世界。因此,将根据所有对象的存在来绘制所有多边形。(考虑所有平移和旋转)

案例2:我将只允许绘制相机视野(FOV)内的多边形。显然,渲染的需求会减少。但要求检查多边形是否在FOV中,每个多边形的FOV都会增加

所以我的问题是:哪种情况(方法)更适合考虑对性能的影响?

我的想法:由于在案例2中调用的数量将增加一倍(计算多边形是否在FOV中+调用渲染),我认为第二种情况会很慢。如果我不正确,请纠正我


我标注了C++如果语言事项

技巧是不检查每个多边形。您将检查一些较大的边界区域,通常是边界框。执行此检查速度快,多边形中为O(1),并且几乎100%有效(只有少数边位置可以在应该的时候不被剔除)


因此,剔除非常快,比渲染所有多边形快得多。

诀窍是不检查每个多边形。您将检查一些较大的边界区域,通常是边界框。执行此检查速度快,多边形中为O(1),并且几乎100%有效(只有少数边位置可以在应该的时候不被剔除)



因此,剔除速度非常快,比渲染所有多边形快得多。

按照您描述的方式(检查每个多边形是否在视野范围内),剔除速度几乎总是较慢-GPU可以更快地完成。但是,这种想法可以通过将多边形组织在一些巧妙的数据结构中来改进,这些数据结构可以快速切割出大量不在视野中的多边形。这些例子有,还有许多其他的。

按照您描述的方式(检查每个多边形是否在视野范围内),它几乎总是比较慢-GPU可以做得更快。但是,这种想法可以通过将多边形组织在一些巧妙的数据结构中来改进,这些数据结构可以快速切割出大量不在视野中的多边形。这些例子有,还有许多其他的。

我同意Puppy发布的内容,但我想补充一些内容。首先,使用边界框明确检查对象是否在视野中。然后,一旦知道某个对象是否在FOV中,就应该使用面法线检查该对象上的哪些多边形在FOV中。绘制没有人会看到的多边形没有任何意义。

我同意Puppy发布的内容,但我想添加一些内容。首先,使用边界框明确检查对象是否在视野中。然后,一旦知道某个对象是否在FOV中,就应该使用面法线检查该对象上的哪些多边形在FOV中。绘制没有人会看到的多边形是没有意义的。

答案是混合的。无论如何,每个多边形的检查都要比仅渲染它慢。相反,检查每一个对象或创建一个包围体层次结构,绘制可见的批次几何体。考虑我正在绘制一个建筑,一半的建筑物是FOV的,可以看到休息。这就是我被困的地方。BVH可以让你快速地在视野中画东西,然后应用遮挡消隐将进一步删除被其他体积遮挡的几何体的体积。@jozxyqk遮挡消隐通常在GPU上完成,以避免在某些像素上运行像素着色器-在VFC之后在CPU上执行OC很少beneficial@BeyelerStudios也许我把术语弄混了,但是,如果相机在一个没有窗户的房间里,并且朝向一个房间的城市,那么这个城市就被墙挡住了,应该被剔除。我知道细粒度遮挡剔除,例如,我会说,即使早期深度测试也是一种形式,但我假设在这种情况下也可以使用相同的术语,在这种情况下,不会绘制整个对象组,因为它们被遮挡。答案是混合的。无论如何,每个多边形的检查都要比仅渲染它慢。相反,检查每一个对象或创建一个包围体层次结构,绘制可见的批次几何体。考虑我正在绘制一个建筑,一半的建筑物是FOV的,可以看到休息。这就是我被困的地方。BVH可以让你快速地在视野中画东西,然后应用遮挡消隐将进一步删除被其他体积遮挡的几何体的体积。@jozxyqk遮挡消隐通常在GPU上完成,以避免在某些像素上运行像素着色器-在VFC之后在CPU上执行OC很少beneficial@BeyelerStudios也许我把术语弄混了,但是,如果相机在一个没有窗户的房间里,并且朝向一个房间的城市,那么这个城市就被墙挡住了,应该被剔除。我知道细粒度遮挡剔除,例如,我会说,即使早期深度测试也是一种形式,但我假设在这种情况下也可以使用相同的术语,在这种情况下,不会绘制整个对象组,因为它们被遮挡。是的,背面剔除肯定会有所帮助。但是你的意思是我必须为每个门实现边界代码吗/window@Fennekin:您可以相对简单地从任意多边形集生成计算AABB的代码。你也可以简单地猜测它,因为准确的边界没有那么重要。是的,背面剔除肯定会有帮助。但是你的意思是我必须为每个门实现边界代码吗/window@Fennekin:您可以相对简单地从任意多边形集生成计算AABB的代码。你也可以简单地猜测它,因为精确的边界没有那么重要。“GPU可以做得更快。”GPU检测到多边形是否在视图中?@Fennekin确定。OpenGL剪辑输入多边形,使其位于视图体积内。这样就不用为每个对象编码边界了。我会让GPU处理that@Fennekin如果它成为一个瓶颈,我提到的空间数据结构将拯救您!我对树木没有经验。但是如果它变成了l