gpt4 book ai didi

opengl - 这是绘制许多不同动态 3D 模型的最佳和正确方法(它们是动画的并且每一帧都会改变)

转载 作者:行者123 更新时间:2023-12-04 06:02:30 29 4
gpt4 key购买 nike

我需要知道如何渲染许多不同的 3D 模型,这些模型会根据每一帧改变它们的几何形状(是动画模型),不要重复模型和纹理。

我携带所有模型并为每个模型创建一个“对象”模型类。

呈现它们的最佳方式是什么?

  1. 为每个 3D 模型使用 1 个 VBO
  2. 为所有模型使用一个 VBO(为了完全不同,我认为这个选项不可行)

我使用 OpenGL 3.x 或更高版本,Windows 上的 C++。

最佳答案

TL; DR - 在渲染性能方面没有 Elixir

这是为什么呢?这取决于获取数据、转换数据、将其推送到 GPU 然后使屏幕上的像素闪烁的复杂过程。因此,出现了一些通常可以提高性能的指南,而不是“一种最佳方法”。

  • 将所有必要的数据保存在 GPU 上(因为离屏幕越近,电子走的路越短:))
  • 在帧之间尽可能少地向 GPU 发送数据
  • 不要在 CPU 和 GPU 之间进行不必要的同步 (这就像试图在平行轨道上运行两列高速列车,但坚持让它们减速到可以让某些东西每隔一段时间通过 window 的程度同时),

现在,很明显,如果您想要一个会改变的模型,您不能吃蛋糕。你必须做出权衡。简而言之,动态对象的渲染速度永远不会像静态对象那样快。那么,您应该怎么做?

  • 向 GPU 提示数据使用情况(GL_STREAM_DRAWGL_DYNAMIC_DRAW)- 应保证最佳内存安排。
  • 不要使用交错缓冲区来混合静态顶点属性和动态顶点属性 - 例如,如果您划分内存,您可以批量更新几何体而保持纹理坐标不变。
  • 尝试尽可能多地完全在 GPU 上完成 - 通过计算着色器和变换反馈,很可能将整个动画数据存储为缓冲区本身并在 GPU 上计算它,从而避免昂贵的同步。

最后但同样重要的是,始终仔细衡量您的变更对绩效的影响。盲目去是没有用的。准确且彻底测量(即使像着色器编译时间这样的东西有时也很重要!)。然后,即使你通过反复试验,也有希望你会有所作为。


并特别强调您的一个观点;它是一个大的 VBO 还是几个小的 VBO 并不重要,但是一个大的 VBO 可能会在内存中出现问题。您仍然可以更新它的一部分,最重要的是它内部的内存排列。

关于opengl - 这是绘制许多不同动态 3D 模型的最佳和正确方法(它们是动画的并且每一帧都会改变),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19717804/

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