Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 GLSL版本错误_Opengl_Glsl_Shader - Fatal编程技术网

Opengl GLSL版本错误

Opengl GLSL版本错误,opengl,glsl,shader,Opengl,Glsl,Shader,作为我项目的一部分,我必须在opengl窗口中显示动画3d模型 我在上找到了一个用于此目的的示例代码 我成功地编译了代码,但在运行时出现以下错误 Status: VSmain shader compiled with errors Compilation details for VSmain shader: 0:3(1): error: syntax error, unexpected VERSION Status: FSmain shader compiled with er

作为我项目的一部分,我必须在opengl窗口中显示动画3d模型

我在上找到了一个用于此目的的示例代码

我成功地编译了代码,但在运行时出现以下错误

  Status: VSmain shader compiled with errors
  Compilation details for VSmain shader:
  0:3(1): error: syntax error, unexpected VERSION

  Status: FSmain shader compiled with errors
  Compilation details for FSmain shader:
  0:3(1): error: syntax error, unexpected VERSION

  Status: Link failed
  Linkage details:
  linking with uncompiled shaderlinking with uncompiled shader
  Errors in shader compilation
  Error initializing the lighting technique
同时也是为了

  printf("%s \n",glGetString(GL_SHADING_LANGUAGE_VERSION));
它正在返回null

我觉得这个错误与skinning.glsl文件有关,如下所示

#version 120
#define VERTEX_IN attribute


const int MAX_POINT_LIGHTS = 2;
const int MAX_SPOT_LIGHTS = 2;
 struct VSInput 
 {
vec3  Position;                                             
vec2  TexCoord;                                             
vec3  Normal;    
ivec4 BoneIDs;
vec4  Weights;
};

interface VSOutput
{                                                                                    
vec2 TexCoord;                                                                 
vec3 Normal;                                                                   
vec3 WorldPos;                                                                 
};

struct VSOutput1
{                                                                                    
vec2 TexCoord;                                                                 
vec3 Normal;                                                                   
vec3 WorldPos;                                                                 
};

const int MAX_BONES = 100;

uniform mat4 gWVP;
uniform mat4 gWorld;
uniform mat4 gBones[MAX_BONES];

shader VSmain(in VSInput VSin:0, out VSOutput VSout)
{       
mat4 BoneTransform = gBones[VSin.BoneIDs[0]] * VSin.Weights[0];
BoneTransform     += gBones[VSin.BoneIDs[1]] * VSin.Weights[1];
BoneTransform     += gBones[VSin.BoneIDs[2]] * VSin.Weights[2];
BoneTransform     += gBones[VSin.BoneIDs[3]] * VSin.Weights[3];

vec4 PosL      = BoneTransform * vec4(VSin.Position, 1.0);
gl_Position    = gWVP * PosL;
VSout.TexCoord = VSin.TexCoord;
vec4 NormalL   = BoneTransform * vec4(VSin.Normal, 0.0);
VSout.Normal   = (gWorld * NormalL).xyz;
VSout.WorldPos = (gWorld * PosL).xyz;                                
}



const int MAX_POINT_LIGHTS = 2;
const int MAX_SPOT_LIGHTS = 2;

struct BaseLight
{
vec3 Color;
float AmbientIntensity;
float DiffuseIntensity;
};

struct DirectionalLight
{
struct BaseLight Base;
vec3 Direction;
};

struct Attenuation                                                                  
{                                                                                   
float Constant;                                                                 
float Linear;                                                                   
float Exp;                                                                      
};                                                                                  

struct PointLight                                                                           
{                                                                                           
struct BaseLight Base;                                                                  
vec3 Position;                                                                          
Attenuation Atten;                                                                      
};                                                                                          

struct SpotLight                                                                            
{                                                                                           
struct PointLight Base;                                                                 
vec3 Direction;                                                                         
float Cutoff;                                                                           
};                                                                                          

uniform int gNumPointLights;                                                                
uniform int gNumSpotLights;                                                                 
uniform DirectionalLight gDirectionalLight;                                                 
uniform PointLight gPointLights[MAX_POINT_LIGHTS];                                          
uniform SpotLight gSpotLights[MAX_SPOT_LIGHTS];                                             
uniform sampler2D gColorMap;                                                                
uniform vec3 gEyeWorldPos;                                                                  
uniform float gMatSpecularIntensity;                                                        
uniform float gSpecularPower; 


vec4 CalcLightInternal(struct BaseLight Light, vec3 LightDirection, VSOutput1 In)            
{                                                                                           
vec4 AmbientColor = vec4(Light.Color, 1.0f) * Light.AmbientIntensity;                   
float DiffuseFactor = dot(In.Normal, -LightDirection);                                     

vec4 DiffuseColor  = vec4(0, 0, 0, 0);                                                  
vec4 SpecularColor = vec4(0, 0, 0, 0);                                                  

if (DiffuseFactor > 0) {                                                                
    DiffuseColor = vec4(Light.Color, 1.0f) * Light.DiffuseIntensity * DiffuseFactor;    

    vec3 VertexToEye = normalize(gEyeWorldPos - In.WorldPos);                             
    vec3 LightReflect = normalize(reflect(LightDirection, In.Normal));                     
    float SpecularFactor = dot(VertexToEye, LightReflect);                              
    SpecularFactor = pow(SpecularFactor, gSpecularPower);                               
    if (SpecularFactor > 0) {                                                           
        SpecularColor = vec4(Light.Color, 1.0f) *                                       
                        gMatSpecularIntensity * SpecularFactor;                         
    }                                                                                   
}                                                                                       

return (AmbientColor + DiffuseColor + SpecularColor);                                   
}                                                                                           

vec4 CalcDirectionalLight(VSOutput1 In)                                                      
{                                                                                           
return CalcLightInternal(gDirectionalLight.Base, gDirectionalLight.Direction, In);  
}                                                                                           

vec4 CalcPointLight(struct PointLight l, VSOutput1 In)                                       
{                                                                                           
vec3 LightDirection = In.WorldPos - l.Position;                                           
float Distance = length(LightDirection);                                                
LightDirection = normalize(LightDirection);                                             

vec4 Color = CalcLightInternal(l.Base, LightDirection, In);                         
float Attenuation =  l.Atten.Constant +                                                 
                     l.Atten.Linear * Distance +                                        
                     l.Atten.Exp * Distance * Distance;                                 

return Color / Attenuation;                                                             
}                                                                                           

vec4 CalcSpotLight(struct SpotLight l, VSOutput1 In)                                         
{                                                                                           
vec3 LightToPixel = normalize(In.WorldPos - l.Base.Position);                             
float SpotFactor = dot(LightToPixel, l.Direction);                                      

if (SpotFactor > l.Cutoff) {                                                            
    vec4 Color = CalcPointLight(l.Base, In);                                        
    return Color * (1.0 - (1.0 - SpotFactor) * 1.0/(1.0 - l.Cutoff));                   
}                                                                                       
else {                                                                                  
    return vec4(0,0,0,0);                                                               
}                                                                                       
}                                                                                           

shader FSmain(in VSOutput FSin, out vec4 FragColor)
{                                    
VSOutput1 In;
In.TexCoord = FSin.TexCoord;
In.Normal = normalize(FSin.Normal);
In.WorldPos = FSin.WorldPos;                                                                 

vec4 TotalLight = CalcDirectionalLight(In);                                         

for (int i = 0 ; i < gNumPointLights ; i++) {                                           
    TotalLight += CalcPointLight(gPointLights[i], In);                              
}                                                                                       

for (int i = 0 ; i < gNumSpotLights ; i++) {                                            
    TotalLight += CalcSpotLight(gSpotLights[i], In);                                
}                                                                                       

FragColor = texture(gColorMap, In.TexCoord.xy) * TotalLight;     
}

program Lighting
{
vs(120)=VSmain();
fs(120)=FSmain();
};
#版本120
#在属性中定义顶点
const int MAX_POINT_LIGHTS=2;
const int MAX_SPOT_LIGHTS=2;
结构VSInput
{
vec3位置;
vec2-TexCoord;
vec3正常;
伊维茨博奈德;
vec4权重;
};
接口输出
{                                                                                    
vec2-TexCoord;
vec3正常;
vec3-WorldPos;
};
结构VSOutput1
{                                                                                    
vec2-TexCoord;
vec3正常;
vec3-WorldPos;
};
常量int MAX_BONES=100;
统一mat4 gWVP;
统一mat4 gWorld;
均匀的mat4骨[最大骨];
着色器VSmain(输入VSin:0,输出VSout VSout)
{       
mat4 BonetTransform=gBones[VSin.BoneIDs[0]]*VSin.Weights[0];
BoneTransform+=gBones[VSin.BoneIDs[1]]*VSin.Weights[1];
BoneTransform+=gBones[VSin.BoneIDs[2]]*VSin.Weights[2];
BoneTransform+=gBones[VSin.BoneIDs[3]]*VSin.Weights[3];
vec4 PosL=骨转换*vec4(VSin.Position,1.0);
gl_位置=gWVP*PosL;
VSout.TexCoord=VSin.TexCoord;
vec4 NormalL=BoneTransform*vec4(VSin.Normal,0.0);
VSout.Normal=(gWorld*NormalL).xyz;
VSout.WorldPos=(gWorld*PosL).xyz;
}
const int MAX_POINT_LIGHTS=2;
const int MAX_SPOT_LIGHTS=2;
结构基本光
{
vec3颜色;
漂浮环境强度;
漂浮扩散强度;
};
结构定向光
{
结构基础灯基础;
vec3方向;
};
结构衰减
{                                                                                   
浮动常数;
浮动线性;
浮动汇率;
};                                                                                  
结构点光源
{                                                                                           
结构基础灯基础;
vec3位置;
衰减阿滕;
};                                                                                          
结构聚光灯
{                                                                                           
结构点光源底座;
vec3方向;
浮动截止;
};                                                                                          
统一的灯光;
统一的聚光灯;
均匀定向光;
均匀点光源gPointLights[最大点光源];
均匀聚光灯[最大聚光灯];
均匀采样二维gColorMap;
统一vec3 gEyeWorldPos;
均匀浮动GMAT特殊强度;
均匀浮动gSpecularPower;
vec4 CalcLightInternal(结构基本灯光、vec3灯光方向、VSOutput1英寸)
{                                                                                           
vec4-AmbientColor=vec4(Light.Color,1.0f)*Light.AmbientIntensity;
浮动扩散因子=点(在正常方向,-光方向);
vec4 DiffuseColor=vec4(0,0,0,0);
vec4镜面颜色=vec4(0,0,0,0);
如果(扩散因子>0){
DiffuseColor=vec4(Light.Color,1.0f)*Light.DiffuseIntensity*扩散因子;
vec3 VertextoPeye=标准化(gEyeWorldPos-In.WorldPos);
vec3 LightReflect=规格化(反射(光方向,In.法线));
浮动镜面反射因子=点(垂直、光反射);
SpecularFactor=功率(SpecularFactor,GSSpecularPower);
如果(镜面反射因子>0){
镜面颜色=vec4(Light.Color,1.0f)*
gMatSpecularIntensity*镜面反射因子;