OpenGl VB中的VBO技术细节
关于在OpenGL程序中正确使用VBO,我有点困惑.
我想创建一个地形分页算法,使用从4096×4096灰度高度图调用的地图作为“整体”地图. 根据我的阅读,存储在VBO中的每个顶点将占用64个字节. 我遇到的问题是,大多数消息来源都说单个VBO的大小应该在1-4mb之间,而VBO越少越好. 一旦我得到代码的地形部分,这也不适应不同的车辆和人员. 我看到的另一个解决方案是在程序运行时从硬盘驱动器中分页数据,但另一个消息来源说,在程序运行时创建和销毁是一个坏主意,并且最好的做法是尽可能少地使用VBO.可能. 我真正想知道的是,我错过了什么? 或者我对我能取得的成就的期望是不现实的? 我理解如何编码,这不是我第一次深入研究OpenGL,但这是我第一次尝试理解和利用VBO. 如果有人能够了解我对VBO的理解是错误的,那将非常感激.
它可能需要尽可能多的字节,具体取决于顶点格式.
不应多次存储相同的顶点.使用索引基元(三角形列表或三角形条).绑定缓冲区的指标,然后使用glDrawElements和glDrawRangeElements.请记住,您可以在OpenGL中使用四边形 – 您不必仅使用三角形.
您无需为地图上的每个像素创建四边形.一些区域是完全平坦的(即高度不会改变),因此添加额外的三角形将浪费资源.如果你为完成的景观添加某种网格简化算法,你应该能够丢弃相当多的三角形.此外,太多的多边形会导致问题 – 三角形或四边形应该占用几个像素.如果存在多个应该占据相同像素的基元,则渲染结果将有点“嘈杂”.因此,您必须考虑所需的详细程度.
我不会相信每一个来源,特别是在互联网上.许多人编写教程远非“专家”.另一件事是在DirectX(不是OpenGL)中,建议尽可能将所有内容(即所有具有兼容顶点格式的对象)放入一个大的静态顶点缓冲区(VBO模拟),并避免切换缓冲区以减少渲染的CPU开销调用.因此,“VBO不应超过4 MB”的建议对我来说非常可疑. 只有来自API开发人员或驱动程序开发人员(ATI或NVidia)的信息才可信赖.或者当绝对肯定作者(教程或文章)在该领域有很多经验而不是另一个无知的想要游戏开发者.来自GDC,Siggraph,ATI,NVidia的文件可能是值得信赖的.应该检查由匿名者“某人”撰写的一些教程实际上是否正确. 无论如何,关于性能,微软有两个文件: 此外,NVidia有一个OpenGL resources的集合,其中包括与性能相关的实用程序(GLexpert可能对您有用,还有NVIdia OpenGL SDK等).一般而言,当您尝试提高性能时,请尝试不同的技巧,并测量结果,而不是盲目地按照某人的建议.查看使用一种或另一种技术可获得的每秒额外帧数.
如果您以这种方式构建整个地图,这是正确的.但是没有理由一次加载整个地图,所以你只需要立即可见的地图块.
他们不要一次装载所有东西.只有可见的对象,地形的当前“块”和几个附近地形块的低多边形版本才会在任何单个时刻加载.游戏只存储当前使用的对象,或者即将使用的对象.它不断从HDD获取数据. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |