Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
OpenGL游戏开发-可以看到的场景_Opengl_Scene - Fatal编程技术网

OpenGL游戏开发-可以看到的场景

OpenGL游戏开发-可以看到的场景,opengl,scene,Opengl,Scene,我正在做一个2d游戏。想象一个XY平面,你就是一个角色。当角色行走时,场景的其余部分进入视野 假设XY平面相当大,并且在当前视图之外还有其他角色 我的问题是,使用opengl,如果这些对象没有在当前视图之外渲染,它们会占用处理时间吗 另外,有哪些方法可以避免渲染场景中不在视图中的部分。如果我有一个距离当前位置1000个单位的立方体,我不希望渲染该对象。我怎么能让opengl不渲染它呢 我想最简单的方法是计算位置,如果距离太远,就不要绘制立方体/对象。关于“剪裁、剔除和可见性测试”的内容如下: O

我正在做一个2d游戏。想象一个XY平面,你就是一个角色。当角色行走时,场景的其余部分进入视野

假设XY平面相当大,并且在当前视图之外还有其他角色

我的问题是,使用opengl,如果这些对象没有在当前视图之外渲染,它们会占用处理时间吗

另外,有哪些方法可以避免渲染场景中不在视图中的部分。如果我有一个距离当前位置1000个单位的立方体,我不希望渲染该对象。我怎么能让opengl不渲染它呢

我想最简单的方法是计算位置,如果距离太远,就不要绘制立方体/对象。

关于“剪裁、剔除和可见性测试”的内容如下:

OpenGL不直接支持确定给定基本体在给定视点的场景中是否可见。最坏的情况是,应用程序需要手动执行这些测试。上一个问题包含有关如何执行此操作的信息

继续阅读该链接的其余部分,它们都是相关的。

关于“剪辑、剔除和可见性测试”的内容如下:

OpenGL不直接支持确定给定基本体在给定视点的场景中是否可见。在最坏的情况下,应用程序将需要手动执行这些测试。上一个问题包含有关如何执行此操作的信息


继续阅读该链接的其余部分,它们都是相关的。

如果已正确设置场景图,则应在显示管道的早期剔除视野之外的对象。它需要在代码中打一个复选框来验证对象是否不可见,因此会有一些处理开销(但不会太多)


如果将对象组织到合理的层次结构中,则只需选中一个复选框即可剔除场景的大部分。

如果已正确设置场景图,则应在显示管道中尽早剔除视野之外的对象。它需要在代码中打一个复选框来验证对象是否不可见,因此会有一些处理开销(但不会太多)


如果您将对象组织到一个合理的层次结构中,那么您只需选中一个复选框就可以剔除场景的大部分。

通常您的应用程序必须执行这些优化-OpenGL实际上只是渲染部分,不执行对象管理或类似的操作。如果您传入某个不可见的数据,它仍然必须将相关坐标转换为视图空间,然后才能确定它完全脱离屏幕或超出某个剪辑平面

有几种从管道中剔除不可见对象的方法。检查一个对象是否在相机后面可能是最容易和最便宜的检查,因为您可以通过对每个对象进行简单的计算平均拒绝一半的数据集。对实际的视锥进行同样的测试,以拒绝所有不可见的内容,并不难


显然,在一个复杂的游戏中,你不想对每个微小的对象都这样做,所以通常会对它们进行分层(例如,如果你已经确定你没有渲染持有枪的角色,你就不会渲染枪)和空间分组(例如,将世界划分为网格/四叉树/并拒绝任何您知道位于您已经确定的当前不可见区域内的对象),或者更常见的是两者的结合。

通常,您的应用程序必须执行这些优化-OpenGL实际上只是渲染部分,不执行对象管理或诸如此类的操作。如果您传入不可见的数据,它仍然必须将相关坐标转换为视图空间,然后才能确定它完全脱离屏幕或超出您的剪辑平面

有几种方法可以从管道中剔除不可见的对象。检查一个对象是否在相机后面可能是最简单、最便宜的检查,因为每个对象只需简单的计算,就可以平均拒绝一半的数据集。对实际的视锥进行同样的测试并不难拒绝一切看不见的东西

显然,在一个复杂的游戏中,你不想对每个微小的对象都这样做,所以通常会对它们进行分层(例如,如果你已经确定你没有渲染持有枪的角色,你就不会渲染枪)和空间分组(例如,将世界划分为一个网格/四叉树/并拒绝任何您知道在您已经确定的区域内的对象,该区域当前不可见),或者更常见的是两者的组合。

唯一获胜的动作是不玩游戏

无论最终是否在屏幕上渲染,每个glVertex等都将是性能上的一大亮点。唯一的解决办法是不要绘制(即剔除)无论如何都不会渲染的对象

最常用的方法是将一个绑定到相机上。将其与一个或结合起来,这取决于您的游戏是否为3d/2d,这样您就不需要检查每个游戏对象与平截头体的相对位置。

“唯一获胜的动作是不玩游戏”

无论最终是否在屏幕上渲染,每个glVertex等都将是性能上的一大亮点。唯一的解决办法是不要绘制(即剔除)无论如何都不会渲染的对象

最常用的方法是将一个绑定到相机上。根据游戏是否为3d/2d,将其与or相结合,这样你就不需要对照截头体检查每个游戏对象。

底层驱动程序可能会在幕后进行一些筛选,但你不能依赖于此,因为它不是OpenGL的一部分