2

我是 OpenGL 的初学者,正在尝试运行一些测试。GLSL Sandbox Gallexy有很多片段着色器可用,我想在 GLES 中尝试它们,重用代码。但是,对于大多数着色器来说,它似乎不起作用。

在我尝试运行的着色器中,唯一在 GLES 中工作的着色器就是这个,出于某种原因。为了实现这一点,我必须消除着色器的时间依赖性。

似乎 WebGL 和 GLES 中的某些变量名称不同。如果是这样的话,究竟是哪些?如果不是,从前者翻译到后者的具体程序是什么?

仅提供黑屏的简单片段着色器示例。在我的特殊情况下,我沿着这个最小的顶点着色器运行它:

precision mediump float;

uniform mat4 uMVPMatrix;

attribute vec4 aPosition;
attribute vec2 aTextureCoord;

varying vec2 vTextureCoord;

void main() {
    vTextureCoord = aTextureCoord;
    gl_Position = uMVPMatrix * aPosition;
}
4

1 回答 1

4

这个问题不是 WebGL 和 OpenGL ES 之间的区别,而是由GLSL Sandbox GalleryShadertoy等网站提供的着色器编程环境与您选择的 OpenGL ES 平台上的相应环境(或缺少环境)之间的区别。

您在 Web 上看到的各种 WebGL 片段着色器沙箱通过统一变量为您的着色器代码提供输入。当您在另一个平台上开发自己的 OpenGL ES 应用程序时,您需要自己提供这些输入。

time您链接到的沙箱站点在其 JavaScript 代码中通过计算适当的值并将它们传递给或类似的函数(在首先编译着色mouseresolution然后在编译的程序中查找每个统一名称的数字位置之后)在其 JavaScript 代码中提供)。在另一个平台上,您需要使用该平台提供的 OpenGL ES 绑定来执行相同的操作。backbuffergl.uniform1f

于 2013-10-28T23:02:37.057 回答