gpt4 book ai didi

java - OpenGL 非常大的网格裁剪

转载 作者:行者123 更新时间:2023-12-02 09:31:33 24 4
gpt4 key购买 nike

为了我的工作,我最近必须进入 OpenGL 3d 渲染,我承认我对这个主题还很陌生。

在不涉及太多细节的情况下,我必须处理大量数据(顶点),我需要从中绘制形状。基本上,可以想象 3d 空间中一个形状非常奇怪的平面。这个形状是动态添加的。想象一辆在飞机上移动的汽车,并在其后面画出它的轨迹 - 但不仅仅是一条简单的轨迹,而是有洞、废弃的部分等。它每秒会生成一个新部分,持续数小时。

所以,显然,你最终得到的是很多顶点,它们确实得到了一定程度的优化,但还不够。其中有数以百万计。显然我不能只是将它作为顶点 VBO 提供给嵌入式系统的 GPU。因此,我一直在阅读有关剔除和裁剪的内容,据我所知,我只需要显示该数组的可见三角形,而不渲染其他所有内容。

现在,我该如何正确地做到这一点?

最简单的强力解决方案是遍历所有三角形,如果它们位于截锥体之外 - 则不绘制它们。生成我绘制的缓冲区并将其传递给 GPU

我的一个想法是将世界空间划分为正方形(一种 block ),并基本上在它们之间分割“轨迹”网格。因此,每个方 block 都将保存其轨迹一部分的数据,然后我可能可以使用视锥体剔除来决定要渲染哪些方 block 以及要跳过哪些方 block 。但我不相信这是一个很好的解决方案。我还读到,您应该尽可能减少 GL 函数调用的数量,并且为数百个方 block 调用它似乎不太好。

因此,我决定向比我更了解该主题的人寻求建议。遗憾的是,我没有太多的学习时间——我需要立即投入其中。如果有人能给我一些指导性的建议,我将不胜感激。

最佳答案

您最好使用某种形式的空间分区树(例如 OctTree、QuadTree 等)。这与您的第二个建议类似,但由于它是分层的,因此搜索树的时间复杂度为 O(logN) vs O(n)。

关于java - OpenGL 非常大的网格裁剪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917613/

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