我对OpenGL,GLSL和WebGL都很陌生。我试图让这个示例代码在http://shdr.bkcore.com/之类的工具中运行,但我无法让它工作。
顶点着色器:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
Fragment Shader:
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;
}
我认为此代码必须来自该语言的过时版本,因此我将顶点着色器更改为:
precision highp float;
attribute vec2 position;
attribute vec3 normal;
varying vec2 TextCoord;
attribute vec2 textCoord;
uniform mat3 normalMatrix;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
varying vec3 fNormal;
varying vec3 fPosition;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
TextCoord = vec2(textCoord);
}
这似乎修复了有关未声明标识符的错误消息,而无法从&#39; float&#39;转换。 to highp 4-component something-or-other&#34 ;,但我不知道从功能上来说,这是否会与原始目标做同样的事情。
另外,当我转换为Vertex Shader的这个版本时,我不知道我应该在片段着色器中使用这一行:
vec2 uv = gl_TexCoord[0].xy;
如何将此线转换为适合转换后的顶点着色器,如何确保顶点着色器均匀转换?
答案 0 :(得分:0)
gl_TexCoord来自桌面OpenGL,而不是OpenGL ES的一部分。您需要创建一个新的用户定义的vec2,以保存坐标值。