gpt4 book ai didi

OpenGL - 选择性世界渲染

转载 作者:行者123 更新时间:2023-12-01 02:42:01 25 4
gpt4 key购买 nike

我正在 build 一个微型城市,它具有城市的基本外观(道路、建筑物、树木等),您可以在其中四处走动。我知道在每一帧中渲染整个模型集不起作用......

那么任何人都可以让我深入了解用于选择性地仅呈现系统可见部分的标准(但最简单)程序吗?我的意思是,只显示可见的东西(相对于相机位置)而不是渲染看不见的部分。
我使用 VC++ 和 GLUT API。

最佳答案

也许 this Wikipedia article提供了对剔除技术领域的非常基本的介绍。

一个很好的起点和最简单的技术之一是视锥体剔除。使用此方法,您可以检查场景中的每个对象是否在视域内(视锥体)。这基本上相当于检查几何体的一些简化边界体积(如完全包含几何体的盒子或球体),如果它位于由六个平面定义的视锥体内。

这可以通过按位置对对象进行分组并创建所谓的边界体积层次结构来进一步优化,这样您例如首先检查整个城市街区是否在可视体积内(通过使用包含整个街区的边界体积),只有在它是时,您才进一步检查各个房屋。

一种更复杂的技术是遮挡剔除,这意味着检查一个对象是否完全隐藏在另一个对象后面。因为这些技术可能会变得更加复杂,所以它应该(如果完成)在视锥体剔除之后实际完成。 OpenGL 具有硬件遮挡查询,可以帮助您确定对象是否实际可见,但它们需要一些额外的工作才能正常工作。尤其是城市可能会有特殊的二维遮挡剔除技术(很久以前就听说过,不知道)。

这只是一个非常广泛的概述,请随意谷歌搜索单个关键字。仔细权衡额外的 CPU 开销是否值得(尤其是使用复杂的遮挡剔除技术)总是一个好主意,考虑到如今的趋势是将尽可能多的几何体批处理到单个绘制调用中(顺便说一句,我希望您不要使用立即模式 glBegin/glEnd ,否则将其更改为顶点数组或更好的 VBO 是您议程上的第一点)。但是视锥体剔除可能是一个不错且简单的起点,尤其是在城市变得相当大的情况下。

关于OpenGL - 选择性世界渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com