【问题标题】:Get transformed 3D Vertices获取转换后的 3D 顶点
【发布时间】:2020-12-10 22:46:23
【问题描述】:

我有一个 webgl 着色器,它基于 three.js 使用骨架和 SkinnedMesh 为我生成模型(参见下面的示例图片)。

问题在于,据我所知,three.js 没有提供任何选项来获取使用的着色器计算产生的顶点。 有没有办法直接从 webgl 使用的缓冲区或通过任何其他方式获取这些顶点,因为我需要它们将结果保存为客户端的 3d 对象文件(例如,作为 .obj 或 .stl)。

很遗憾,我无法提供源代码,但我希望这是一个关于 webgl 的相当普遍的问题,这可能足以帮助我吗?

【问题讨论】:

    标签: javascript three.js opengl-es webgl


    【解决方案1】:

    没有“简单”的方法来获取转换后的顶点

    一种方法是在 JavaScript 中运行与着色器本身相同的数学运算。见this answer

    另一种方法是尝试使用转换反馈让 GPU 将计算结果写回缓冲区。 转换反馈 仅适用于 WebGL2 而不是 WebGL1,此外,three.js 至少在 r123 中没有内置支持来帮助您。添加支持将需要修改 three.js 的源代码,因为为了使用转换反馈,您必须在编译和链接着色器时调用一些函数,AFAIK 在three.js 中没有钩子可以做到这一点,因此您必须修改源代码.特别是您需要在调用gl.linkProgram 之前调用gl. transformFeedbackVaryings,以便告诉WebGL 您希望它写出哪些变量。

    有一个简短的 non-three.js 示例使用转换反馈写出值here

    另外需要注意的是,如果您需要将顶点值读回 JavaScript,则需要调用 gl.getBufferSubData,这被认为很慢。是否太慢取决于您的需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      相关资源
      最近更新 更多