相关疑难解决方法(0)

WebGL - 有替代方法在HTML中嵌入着色器吗?

在WebGL中使用GLSL着色器的流行方式似乎是将它们嵌入到主html文件中.顶点和片段着色器嵌入在以下标记中:

<script id="shader-fs" type="x-shader/x-fragment">
Run Code Online (Sandbox Code Playgroud)

这与我在Mozilla Developer Network页面中的WebGL示例中看到的相同.

这适用于简单的应用程序,但是当你有一个带有许多着色器的复杂应用程序时,html文件会变得混乱.(我一直在编辑错误的着色器!)另外,如果你想重复使用着色器,这个方案很不方便.

所以我考虑将这些着色器放在一个单独的XML文件中,并使用XMLHttpRequest()加载它们.然后我看到其他人有同样的想法:

http://webreflection.blogspot.com/2010/09/fragment-and-vertex-shaders-my-way-to.html

我喜欢使用.c文件的建议,因为这为GLSL提供了语法高亮和其他编辑器便利.

但是上述方法的问题是(据我所知)XMLHttpRequest()在开发和测试WebGL应用程序时无法加载本地.c文件 - 即在客户端.但是在此过程中继续将其上传到服务器是很麻烦的.

因此,如果我想将着色器保留在html文件之外,那么将它们作为字符串嵌入代码中是唯一的选择吗?但这会使编写和调试变得困难......

我很感激有关在WebGL应用程序中管理多个GLSL着色器的任何建议.

问候

编辑(2011年5月5日)

由于我使用Mac进行开发,我决定启用Apache服务器,并将我的webgl代码放在http:// localhost/~username /下.这避免了在开发期间禁用文件:协议的问题.现在javascript文件加载代码在本地工作,因为使用了http:而不是file:.我以为我会把它放在这里以防万一有人发现它有用.

glsl webgl

32
推荐指数
5
解决办法
2万
查看次数

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>
Run Code Online (Sandbox Code Playgroud)

在我的html标题中,如何从外部文件中链接? - 我尝试了通常的javascript方法;

<script type="text/javascript" src="webgl_shader.js"></script>
Run Code Online (Sandbox Code Playgroud)

javascript external extern webgl opengl-es-2.0

25
推荐指数
2
解决办法
2万
查看次数

为什么 WebGL 使用 GLSL 代码块的字符串表示形式?

因此,我查找了一些学习 WebGL 的基本教程,并注意到它们都将 GLSL 代码块的字符串表示形式作为参数传递(例如thisthis)。

我查看了WebGLRenderingContext的文档,果然,shaderSource方法的源参数描述是:

包含要设置的 GLSL 源代码的 DOMString。

我一直认为这种事情是可能的,但不是一个好的编码实践。

这是一个有意的设计选择,还是 Javascript 的其他功能确实没有提供可能的替代方案?(即最后的选择)

这种情况在其他语言中也会发生吗?或者通常应该避免这种情况?

编辑:误认为 GLSL 为 Javascript

javascript string shader webgl

2
推荐指数
1
解决办法
1672
查看次数

标签 统计

webgl ×3

javascript ×2

extern ×1

external ×1

glsl ×1

opengl-es-2.0 ×1

shader ×1

string ×1