Javascript 和 WebGL、外部脚本
只是好奇;如何将 webgl 着色器放置在外部文件中?
目前我有;
<script id="shader-fs" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
void main(void)
{
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
</script>
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
void main(void)
{
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
}
</script>
在我的 html 标头中,如何从外部文件链接到此标头? - 我尝试了通常的 javascript 方法;
<script type="text/javascript" src="webgl_shader.js"></script>
Just curious; How do I place my webgl shaders, in an external file?
Currently I'm having;
<script id="shader-fs" type="x-shader/x-fragment">
#ifdef GL_ES
precision highp float;
#endif
void main(void)
{
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
</script>
<script id="shader-vs" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
void main(void)
{
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);
}
</script>
In my html header, how do I link in this from an external file? - I tried the usual javascript approach;
<script type="text/javascript" src="webgl_shader.js"></script>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于外部文件,您需要停止使用 script 标签。我建议使用类似 XMLHttpRequest 的内容。我还建议重命名您的文件,它们是着色器而不是 Javascript,因此使用不同的扩展名以避免混淆。我使用类似“shiny_surface.shader”的东西。
这就是我所做的:
如果您使用像 JQuery 这样的库,它们可能有一个类似于我的 loadFiles 的函数。
For external files, you need to stop using the script tag. I suggest using something like XMLHttpRequest. I would also suggest renaming your files, they are shaders not Javascript so use a different extension to avoid confusion. I use something like "shiny_surface.shader".
This is what I do:
If you're using a library like JQuery, they probably have a function similar to my loadFiles one.
我遇到了同样的问题,发现这对我来说适用于 jQuery:
其中
shader.fs
和shader.vs
是我的着色器(并包括和
声明行)
更新
对于 Chrome,智能猜测不会选择“xml”。以下代码也适用于 Chrome:
更新 2:
由于着色器源中的
<
和&
需要转义以作为 XML 加载,因此即使您使用小于比较或和逻辑运算符:I had the same issue and found that this has worked for me with jQuery:
Where
shader.fs
andshader.vs
are my shaders (and include the<script type="x-shader/x-fragment">
and<script type="x-shader/x-vertex">
declaration lines)Update
With Chrome the intelligent guess does not select 'xml'. The following code works in Chrome as well:
Update 2:
As
<
and&
in the shader source need to be escaped to load in as XML, this works all of the time even if you use the less than comparision or the and logic operators:您可以使用像我这样的开源着色器管理库:
https://github.com/ILOVEPIE/Shader.js
它允许您从 URL 加载着色器并缓存着色器源代码以供将来访问该站点。
它还使使用制服变得更加简单。
You could use an open source shader managing library like mine:
https://github.com/ILOVEPIE/Shader.js
It lets you load shaders from urls and caches shader source code for future visits to the site.
It also makes it simpler to use uniforms.
我不是 WebGL 专家,但这行得通吗?
I am no WebGL guru, but does this work?