Opengl es Can';无法使OpenGL代码正常工作

Opengl es Can';无法使OpenGL代码正常工作,opengl-es,glsl,webgl,fragment-shader,vertex-shader,Opengl Es,Glsl,Webgl,Fragment Shader,Vertex Shader,我对OpenGL、GLSL和WebGL非常陌生。我试图让这个示例代码在一个类似的工具中工作,但我无法让它工作 顶点着色器: void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; } 片段着色器: precision highp float; uniform float time; uniform vec2 resolut

我对OpenGL、GLSL和WebGL非常陌生。我试图让这个示例代码在一个类似的工具中工作,但我无法让它工作

顶点着色器:

void main()
{ 
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
    gl_TexCoord[0] = gl_MultiTexCoord0;
}
片段着色器:

precision highp float;
uniform float time;
uniform vec2 resolution;
varying vec3 fPosition;
varying vec3 fNormal;

uniform sampler2D tex0;

void main()
{
  float border = 0.01;
  float circle_radius = 0.5;
  vec4 circle_color = vec4(1.0, 1.0, 1.0, 1.0);
  vec2 circle_center = vec2(0.5, 0.5);

  vec2 uv = gl_TexCoord[0].xy;
  vec4 bkg_color = texture2D(tex0,uv * vec2(1.0, -1.0));

  // Offset uv with the center of the circle.
  uv -= circle_center;
  float dist = sqrt(dot(uv, uv));

  if ( (dist > (circle_radius+border)) || (dist < (circle_radius-border)) )
gl_FragColor = bkg_color;
else
gl_FragColor = circle_color;
}
vec2 uv = gl_TexCoord[0].xy;
这似乎修复了有关未声明标识符和无法“从‘float’转换为highp 4分量或其他内容”的错误消息,但我不知道从功能上来说,这是否会与最初的预期做相同的事情

另外,当我转换到这个版本的顶点着色器时,我不知道应该如何处理片段着色器中的这一行:

precision highp float;
uniform float time;
uniform vec2 resolution;
varying vec3 fPosition;
varying vec3 fNormal;

uniform sampler2D tex0;

void main()
{
  float border = 0.01;
  float circle_radius = 0.5;
  vec4 circle_color = vec4(1.0, 1.0, 1.0, 1.0);
  vec2 circle_center = vec2(0.5, 0.5);

  vec2 uv = gl_TexCoord[0].xy;
  vec4 bkg_color = texture2D(tex0,uv * vec2(1.0, -1.0));

  // Offset uv with the center of the circle.
  uv -= circle_center;
  float dist = sqrt(dot(uv, uv));

  if ( (dist > (circle_radius+border)) || (dist < (circle_radius-border)) )
gl_FragColor = bkg_color;
else
gl_FragColor = circle_color;
}
vec2 uv = gl_TexCoord[0].xy;

如何将此行转换为与已转换的顶点着色器相匹配,以及如何确保顶点着色器已正确转换?

gl_TexCoord来自桌面OpenGL,而不是OpenGL ES的一部分。您需要创建一个新的用户定义的vec2,该vec2可以改变以保存坐标值。

我认为web着色器中不支持gl_TexCoord,我也尝试了,并且gl_TexCoord行给出了错误。包括在该列表中
gl_ModelViewProjectionMatrix
gl_Vertex
gl_MultiTexCoord0
。所有这些都是旧的、没有数据的OpenGL东西,在OpenGL ES或WebGL中不存在。基本上是没有着色器的原始OpenGL。当添加着色器时,他们尝试将着色器与旧内容混合,并且许多
gl_XXX
变量正在访问旧内容。当OpenGLES出现时,他们扔掉了所有的旧东西。现在一切都完全由用户决定。你决定数据,名字,一切。请参阅()?即使您修复了代码,也不清楚它是否可以在这些站点上工作。它在处理纹理。AFAICT Shrd编辑器和glsl沙盒不支持纹理。Shader toy允许使用一些着色器,但上面的着色器似乎不是为Shader toy使用着色器而设计的。使用不同的颜色作为纹理。