Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl &引用;不正确的预处理器指令“;在片段着色器中?_Opengl_Glsl - Fatal编程技术网

Opengl &引用;不正确的预处理器指令“;在片段着色器中?

Opengl &引用;不正确的预处理器指令“;在片段着色器中?,opengl,glsl,Opengl,Glsl,我正在制作2个着色器(一个.frag文件),并收到一条错误消息,上面说“错误:0:83:”:语法错误:预处理器指令不正确”。当我按“确定”时,它不会显示,也不会使模型显示,我认为它会使其他着色器无法工作。奇怪的是,只有图像显示,而没有模型。为什么会发生这种情况 着色器1: #version 120 #define PI 3.14159265 varying vec3 position; varying vec3 normal; varying vec4 color; varying vec2

我正在制作2个着色器(一个.frag文件),并收到一条错误消息,上面说“错误:0:83:”:语法错误:预处理器指令不正确”。当我按“确定”时,它不会显示,也不会使模型显示,我认为它会使其他着色器无法工作。奇怪的是,只有图像显示,而没有模型。为什么会发生这种情况

着色器1:

#version 120
#define PI 3.14159265

varying vec3 position;
varying vec3 normal;
varying vec4 color;
varying vec2 textureCoord;
varying vec2 imageCoord;

uniform float time;
uniform float beat;
uniform vec2 resolution;
uniform vec2 textureSize;
uniform vec2 imageSize;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 perspectiveMatrix;
uniform mat4 textureMatrix;
uniform sampler2D sampler0;
uniform sampler2D sampler1;

vec2 img2tex( vec2 v ) { return v / textureSize * imageSize; }



float amount = 0.3;

float random(float x) 
{ 
    return fract(sin(x) * 10000.);          
}

float noise(vec2 p) 
{
    return random(p.x + p.y * 10000.);            
}

vec2 sw(vec2 p) { return vec2(floor(p.x), floor(p.y)); }
vec2 se(vec2 p) { return vec2(ceil(p.x), floor(p.y)); }
vec2 nw(vec2 p) { return vec2(floor(p.x), ceil(p.y)); }
vec2 ne(vec2 p) { return vec2(ceil(p.x), ceil(p.y)); }

float smoothNoise(vec2 p) 
{
    vec2 interp = smoothstep(0., 1., fract(p));
    float s = mix(noise(sw(p)), noise(se(p)), interp.x);
    float n = mix(noise(nw(p)), noise(ne(p)), interp.x);
    return mix(s, n, interp.y);        
}

float fractalNoise(vec2 p) 
{
    float x = 0.;
    x += smoothNoise(p      );
    x += smoothNoise(p * 2. ) / 2.;
    x += smoothNoise(p * 4. ) / 4.;
    x += smoothNoise(p * 8. ) / 8.;
    x += smoothNoise(p * 16.) / 16.;
    x /= 1. + 1./2. + 1./4. + 1./8. + 1./16.;
    return x;            
}

float movingNoise(vec2 p) 
{ 
    float x = fractalNoise(p + time);
    float y = fractalNoise(p - time);
    return fractalNoise(p + vec2(x, y));    
}

float nestedNoise(vec2 p) 
{    
    float x = movingNoise(p);
    float y = movingNoise(p + 100.);
    return movingNoise(p + vec2(x, y));    
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord.xy / imageSize.xy;
    float n = nestedNoise(uv * 6.) * 1.0;
    float offset = mix(0.0, 2.0, amount);

    #if NORM_FOCUS
      vec2 offsetVector = normalize(vec2(0.5, 0.5) - uv) * (n * offset);
    #else
      vec2 offsetVector = (vec2(0.5, 0.5) - uv) * (n * offset);
    #endif

    fragColor = texture2D(sampler0, img2tex(uv) + offsetVector);
}

void main()
{
    mainImage(gl_FragColor.rgba, gl_FragCoord.xy);
}
着色器2:

#version 120
#define PI 3.14159265

varying vec3 position;
varying vec3 normal;
varying vec4 color;
varying vec2 textureCoord;
varying vec2 imageCoord;

uniform float time;
uniform float beat;
uniform vec2 resolution;
uniform vec2 textureSize;
uniform vec2 imageSize;
uniform mat4 modelMatrix;
uniform mat4 viewMatrix;
uniform mat4 perspectiveMatrix;
uniform mat4 textureMatrix;
uniform sampler2D sampler0;
uniform sampler2D sampler1;

vec2 img2tex( vec2 v ) { return v / textureSize * imageSize; }



float amount = 0.9;

float random(float x) 
{ 
    return fract(sin(x) * 10000.);          
}

float noise(vec2 p) 
{
    return random(p.x + p.y * 10000.);            
}

vec2 sw(vec2 p) { return vec2(floor(p.x), floor(p.y)); }
vec2 se(vec2 p) { return vec2(ceil(p.x), floor(p.y)); }
vec2 nw(vec2 p) { return vec2(floor(p.x), ceil(p.y)); }
vec2 ne(vec2 p) { return vec2(ceil(p.x), ceil(p.y)); }

float smoothNoise(vec2 p) 
{
    vec2 interp = smoothstep(0., 1., fract(p));
    float s = mix(noise(sw(p)), noise(se(p)), interp.x);
    float n = mix(noise(nw(p)), noise(ne(p)), interp.x);
    return mix(s, n, interp.y);        
}

float fractalNoise(vec2 p) 
{
    float x = 0.;
    x += smoothNoise(p      );
    x += smoothNoise(p * 2. ) / 2.;
    x += smoothNoise(p * 4. ) / 4.;
    x += smoothNoise(p * 8. ) / 8.;
    x += smoothNoise(p * 16.) / 16.;
    x /= 1. + 1./2. + 1./4. + 1./8. + 1./16.;
    return x;            
}

float movingNoise(vec2 p) 
{ 
    float x = fractalNoise(p + time);
    float y = fractalNoise(p - time);
    return fractalNoise(p + vec2(x, y));    
}

float nestedNoise(vec2 p) 
{    
    float x = movingNoise(p);
    float y = movingNoise(p + 100.);
    return movingNoise(p + vec2(x, y));    
}

void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
    vec2 uv = fragCoord.xy / imageSize.xy;
    float n = nestedNoise(uv * 6.) * 1.0;
    float offset = mix(0.0, 2.0, amount);

    #if NORM_FOCUS
      vec2 offsetVector = normalize(vec2(0.5, 0.5) - uv) * (n * offset);
    #else
      vec2 offsetVector = (vec2(0.5, 0.5) - uv) * (n * offset);
    #endif

    fragColor = texture2D(sampler0, img2tex(uv) + offsetVector);
}

void main()
{
    mainImage(gl_FragColor.rgba, gl_FragCoord.xy);
}

我希望它能工作,但它没有工作。

您的第一个片段着色器中有:

#if NORM_FOCUS  // line 83
  vec2 offsetVector = normalize(vec2(0.5, 0.5) - uv) * (n * offset);
#else
  vec2 offsetVector = (vec2(0.5, 0.5) - uv) * (n * offset);
#endif
在没有任何其他代码的情况下,我看不到
NORM_FOCUS
\define
d,这与以下内容相冲突(,第7页):

#if
#elif
后面的表达式仅限于对文字整数常量进行运算的表达式,以及定义的
运算符所使用的标识符

因此,要么
#将NORM_FOCUS定义为某物,要么切换到
#ifdef NORM_FOCUS