gpt4 book ai didi

OpenGL 着色器 - 相机转换应该在 GPU 还是 CPU 上进行?

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

所以目前我正在做的是在将元素加载到 VBO 之前创建一个新矩阵并将它们添加到其中。我这样做是为了可以随心所欲地使用矩阵。所以我所做的就是将相机位置添加到矩阵中的坐标上。

注意:对象的实际位置保存在矩阵的其他位置,是一个平移阶段。

现在,这可以工作,但我不确定它是否正确,或者我是否应该转换为着色器中而不是 CPU 中的相机位置。

这是我的问题:

相机转换应该在 GPU 还是 CPU 上进行?

最佳答案

我不完全确定您目前在做什么。但明智的做法是不碰VBO。相反,将一个或多个变换矩阵作为统一传递给顶点着色器,并在 GPU 上执行矩阵乘法。

在 CPU 上更改 VBO 数据是疯狂的,这意味着要么在 CPU 上保留顶点数据的副本,迭代它并上传,要么映射缓冲区并迭代它。无论哪种方式,它都会非常慢。拥有 VBO 的全部意义在于,您可以上传一次顶点数据,并在 CPU 上同时工作,而 GPU 则关闭并处理所述顶点数据。

相反,您只需将顶点存储在顶点缓冲区中一次,最好是在对象空间中(只是为了理智起见)。然后,您跟踪每个对象的变换矩阵,该矩阵将顶点从对象空间变换到剪辑空间。您将该矩阵传递给顶点着色器,并在 GPU 上对每个顶点进行乘法运算。

显然,GPU 每帧都会将每个顶点至少乘以一个矩阵。但是 GPU 具有并行硬件,可以非常快地执行矩阵乘法。因此,特别是当你的矩阵不断变化时(例如你的对象移动),这比在 CPU 上执行并更新大量缓冲区要快得多。此外,您还可以释放 CPU 来执行其他操作,例如物理或音频等。

现在我可以想象,如果你的对象从不移动,你可能不想这样做,但是,GPU 矩阵乘法可能与 CPU 浮点乘法的速度大致相同(我不知 Prop 体情况)。因此,为静态对象提供更多着色器是否值得值得怀疑。

摘要:

  • 更新 CPU 上的缓冲区缓慢
  • GPU 上的矩阵乘法快速
  • 没有缓冲区更新? = 释放CPU。
  • GPU 上的乘法? = 轻松快速地移动对象(只需更改您上传的矩阵)。

希望这会有所帮助。

关于OpenGL 着色器 - 相机转换应该在 GPU 还是 CPU 上进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933710/

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