【发布时间】:2011-08-18 05:36:33
【问题描述】:
在 WebGL 中使用 GLSL 着色器的流行方式似乎是将它们嵌入到主 html 文件中。 顶点和片段着色器嵌入在如下标签中:
<script id="shader-fs" type="x-shader/x-fragment">
这与我在 Mozilla 开发者网络页面的 WebGL 示例中看到的约定相同。
这适用于简单的应用程序,但是当您有一个具有多个着色器的复杂应用程序时,html 文件会变得混乱。 (我一直在编辑错误的着色器!)另外,如果你想重用你的着色器,这个方案很不方便。
所以我考虑将这些着色器放在一个单独的 XML 文件中,并使用 XMLHttpRequest() 加载它们。然后我看到其他人也有同样的想法:
http://webreflection.blogspot.com/2010/09/fragment-and-vertex-shaders-my-way-to.html
我喜欢使用 .c 文件的建议,因为这为您提供了语法高亮和其他 GLSL 编辑器的便利。
但上述方法的问题是(据我了解)XMLHttpRequest() 无法加载本地 .c 文件 - 即在客户端 - 在您开发和测试 WebGL 应用程序时。但是在这个过程中一直上传到服务器很麻烦。
因此,如果我想将着色器保留在 html 文件之外,是否可以将它们作为字符串嵌入代码中?但这会使编写和调试变得困难......
如果有任何关于在 WebGL 应用程序中管理多个 GLSL 着色器的建议,我将不胜感激。
问候
编辑(2011 年 5 月 5 日)
由于我使用 Mac 进行开发,我决定启用 Apache 服务器,并将我的 webgl 代码放在 http://localhost/~username/ 下。这回避了 file: 协议在开发过程中被禁用的问题。现在 javascript 文件加载代码在本地工作,因为使用的是 http:,而不是 file:。只是想我会把它放在这里以防万一有人觉得它有用。
【问题讨论】:
-
您的编辑很有帮助。我正在翻阅答案,试图弄清楚有什么大不了的。
-
我喜欢使用“http-server”而不是 apache,您可以使用
npm install -g http-server从 npm 获取它。然后使用它,cd到你的项目并运行http-server -a localhost -p 8080 . -
这是迄今为止我发现的最好的方法:- stackoverflow.com/a/54092649/5878848