在OpenGL中绘制3d图形的最有效方法?

在OpenGL中绘制3d图形的最有效方法?,opengl,graphics,3d,elements,framebuffer,Opengl,Graphics,3d,Elements,Framebuffer,对于我来说,使用GLDrawerElements渲染单个GL_三角形元素或者将元素绘制到纹理,然后将其渲染到另一个纹理以使用帧缓冲区构建场景更有效吗? 无论哪种方式,每次修改图形对象时都会发生这种情况,并且每次都必须更新包含此对象的父对象。 谢谢 我只是创建一些更高级别的对象,以便轻松高效地绘制大型场景。这个想法是要有一个图形树,并且只根据需要在我的场景中为一个单独的立方体重新绘制树的部分,一直到根 在交互式应用程序(如“Minecraft”类游戏)中,仅对屏幕“受损”部分进行更新的过程非常棘手

对于我来说,使用GLDrawerElements渲染单个GL_三角形元素或者将元素绘制到纹理,然后将其渲染到另一个纹理以使用帧缓冲区构建场景更有效吗? 无论哪种方式,每次修改图形对象时都会发生这种情况,并且每次都必须更新包含此对象的父对象。 谢谢
我只是创建一些更高级别的对象,以便轻松高效地绘制大型场景。这个想法是要有一个图形树,并且只根据需要在我的场景中为一个单独的立方体重新绘制树的部分,一直到根

在交互式应用程序(如“Minecraft”类游戏)中,仅对屏幕“受损”部分进行更新的过程非常棘手,因为“注视”方向经常变化。很可能它永远不会像每帧渲染整个场景那样更高效或内存受限

考虑相机变换的(频繁)情况。屏幕上的每个像素都需要更新。在这种情况下,检测“损坏”部分没有意义——整个屏幕都损坏了,检测过程中花费的任何时间都被浪费了

在相机不改变的情况下,计算需要渲染的内容可能会很困难,而且成本也很高。您需要知道移动了哪些对象,它们移动到了哪里,以及它们在两个位置(所有屏幕空间)重叠的对象。如果使用顶点着色器以编程方式转换顶点(例如,考虑仅使用GPU的粒子系统模拟),则屏幕空间可能特别难以计算


我的建议是在别处寻找优化机会。

你不能。如果移动相机,场景需要重新绘制(这就是现代实时计算机图形学的内容)

请注意,如果使用透视投影,则不存在例外情况(没有任何特定的运动可以帮助您避免重画。如果您将相机向上翻转或向左/向右翻转,则只需反转最终图像,但这无论如何都不是“有用”的运动)

我建议深入了解GPU背后发生的事情,这样你会对GPU可能和不可能的事情感觉更好。(我想这可以用矩阵图像来证明)

如果你接受“扭曲”,那么你可以使用骗子技术。假设一次渲染一批100x100x100个立方体。您可以将100x100x100立方体替换为一个大立方体(其中只有3个可见面,您必须手动更新这3个面)。如果你移动的很快,它看起来就像一个棱柱形立方体,你会觉得地平线上布满了巨大的水晶(如果需要的话,这可能是一个很好的效果)


但是我很怀疑这会比渲染立方体批处理慢。(尝试一下,您会看到)

还有什么建议,我可以从所选透视图中检测整个场景是否不透明,这样我就不必渲染构成场景的任何更远的立方体了?“想想我的飞船”??