javascript - 从 2018 年开始在 WebGL 中加载着色器?

标签 javascript three.js webgl webgl2

<分区>

我记得我们必须像这样将着色器嵌入到 html 中:

<script id="fragmentShader" type="x-shader/x-vertex"> </script>
<script id="vertexShader" type="x-shader/x-vertex"></script>

对我来说这并不理想。当然,我可以创建着色器文件并使用 PHP 来包含它们,但我也不想这样做。

有没有其他方法可以在没有第三方工具的情况下在 HTML 中使用着色器?

最佳答案

着色器代码必须以某种方式对 WebGL 代码可用,所以这里没有魔法。一些替代方案是:

  • 使用 Ajax 检索着色器的源代码。在这种情况下,您的 HTML 将没有着色器,并且 Javascript 代码将通过进行异步调用来检索它们。这种方法的缺点是您可能有很多请求并且页面加载时间可能会受到影响。
  • 在 Javascript 代码中将着色器的源代码硬编码为字符串文字。这将很难维护,因为您将在同一文件中混合使用 Javascript 代码和着色器代码。它可能适用于小型项目,但从长远来看会带来麻烦。
  • 使用 WebAssembly 并将您的代码(包括着色器源代码)编译为 wasm 文件。在这种情况下,着色器源将隐藏在 wasm 文件中,并由浏览器直接处理。
  • 使用工具包创建分发包。您可以将着色器和 Javascript 代码分开并组织起来(例如,放入目录等)。然后你可以使用像 Gulp 这样的 Javascript 工具包。或 Grunt处理代码并将它们合并到一个源文件中。你可以看看source code of Three.js看看它是如何组织的。如果你想使用那个库,你所要做的就是将一个文件导入你的 HTML 页面。该文件包含 Javascript 和相关着色器。

关于javascript - 从 2018 年开始在 WebGL 中加载着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51894514/

相关文章:

javascript - Angular-UI 模态解析

javascript - 三.js 实时动画

javascript - Canvas、WebGL 调试功能在 2019 浏览器中不存在?

Javascript 或 Jquery - 在复选框单击时,如何更改父元素的背景颜色?

javascript - Codility Peak JavaScript 实现

javascript - 三.js : Box3 from an object not in scene

javascript - three.js形状孔高度

javascript - Three.js 对象 'shimmering' 远距离

javascript - 无法使 three.js 中的 FirstPersonControls 正常工作

动画函数中的 JavaScript 错误