Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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 rds.x+0.5\n\ UVCoords.y=0.5*ProjCoords.y+0.5\n\ 浮动深度=纹理(gShadowMap,UVCoords).x\n\ 如果(深度0){\n\ DiffuseColor=vec4(Light.Color,1.0f_Opengl_Struct_Glsl - Fatal编程技术网

Opengl rds.x+0.5\n\ UVCoords.y=0.5*ProjCoords.y+0.5\n\ 浮动深度=纹理(gShadowMap,UVCoords).x\n\ 如果(深度0){\n\ DiffuseColor=vec4(Light.Color,1.0f

Opengl rds.x+0.5\n\ UVCoords.y=0.5*ProjCoords.y+0.5\n\ 浮动深度=纹理(gShadowMap,UVCoords).x\n\ 如果(深度0){\n\ DiffuseColor=vec4(Light.Color,1.0f,opengl,struct,glsl,Opengl,Struct,Glsl,rds.x+0.5\n\ UVCoords.y=0.5*ProjCoords.y+0.5\n\ 浮动深度=纹理(gShadowMap,UVCoords).x\n\ 如果(深度0){\n\ DiffuseColor=vec4(Light.Color,1.0f)*Light.DiffuseIntensity*扩散因子;\n\ \n\ vec3 VertextoPeye=规格化(gEyeWorldPos-WorldPos0);\n\ vec3 LightReflect=规格化(反射(光方向,法线));

rds.x+0.5\n\ UVCoords.y=0.5*ProjCoords.y+0.5\n\ 浮动深度=纹理(gShadowMap,UVCoords).x\n\ 如果(深度0){\n\ DiffuseColor=vec4(Light.Color,1.0f)*Light.DiffuseIntensity*扩散因子;\n\ \n\ vec3 VertextoPeye=规格化(gEyeWorldPos-WorldPos0);\n\ vec3 LightReflect=规格化(反射(光方向,法线));\n\ float SpecularFactor=点(顶点、眼睛、光反射);\n\ SpecularFactor=pow(SpecularFactor,gsspecularpower);\n\ 如果(镜面反射因子>0){\n\ 镜面颜色=vec4(Light.Color,1.0f)*\n\ gMatSpecularIntensity*镜面反射因子;\n\ }\n\ }\n\ \n\ 返回(环境颜色+阴影因子*(漫射颜色+镜面颜色))\n\ }\n\ \n\ vec4计算方向灯(vec3正常)\n\ {\n\ 返回CalcLightInternal(GDDirectionAllight.Base,GDDirectionAllight.Direction,Normal,1.0);\n\ }\n\ \n\ vec4 CalcPointLight(结构点光源l、vec3法线、vec4 LightSpacePos)\n\ {\n\ vec3 LightDirection=WorldPos0-l.位置;\n\ 浮动距离=长度(光照方向);\n\ LightDirection=规格化(LightDirection);\n\ float ShadowFactor=CalcShadowFactor(LightSpacePos);\n\ \n\ vec4 Color=CalcLightInternal(l.Base、LightDirection、Normal、ShadowFactor);\n\ 浮点数衰减=l.衰减常数+\n\ l、 注意:线性*距离+\n\ l、 Atten.Exp*距离*距离;\n\ \n\ 返回颜色/衰减;\n\ }\n\ \n\ vec4 CalcSpotLight(结构聚光灯l、vec3法线、vec4 LightSpacePos)\n\ {\n\ vec3 LightToPixel=规格化(WorldPos0-l.Base.Position);\n\ float SpotFactor=点(LightToPixel,l.方向);\n\ \n\ 如果(点因子>l.Cutoff){\n\ vec4 Color=CalcPointLight(l.Base、Normal、LightSpacePos);\n\ 返回颜色*(1.0-(1.0-点因子)*1.0/(1.0-l.Cutoff));\n\ }\n\ else{\n\ 返回vec4(0,0,0,0);\n\ }\n\ }\n\ \n\ vec3 CalcCumpedNormal()\n\ {\n\ vec3 Normal=规格化(Normal0);\n\ vec3切线=规格化(切线0);\n\ 切线=规格化(切线-点(切线,法线)*法线);\n\ vec3 Bitangent=交叉(正切,法线);\n\ vec3 BumpMapNormal=纹理(gNormalMap,TexCoord0).xyz;\n\ BumpMapNormal=2.0*BumpMapNormal-vec3(1.0,1.0,1.0);\n\ vec3新常态;\n\ mat3 TBN=mat3(切线、双切线、法线);
static const char* pFS = "                                                          \n\
#version 330                                                                        \n\
                                                                                    \n\
const int MAX_POINT_LIGHTS = 2;                                                     \n\
const int MAX_SPOT_LIGHTS = 2;                                                      \n\
                                                                                    \n\
in vec4 LightSpacePos;                                                              \n\
in vec2 TexCoord0;                                                                  \n\
in vec3 Normal0;                                                                    \n\
in vec3 WorldPos0;                                                                  \n\
in vec3 Tangent0;                                                                   \n\
                                                                                    \n\
out vec4 FragColor;                                                                 \n\
                                                                                    \n\
struct BaseLight                                                                    \n\
{                                                                                   \n\
    vec3 Color;                                                                     \n\
    float AmbientIntensity;                                                         \n\
    float DiffuseIntensity;                                                         \n\
};                                                                                  \n\
                                                                                    \n\
struct DirectionalLight                                                             \n\
{                                                                                   \n\
    struct BaseLight Base;                                                          \n\
    vec3 Direction;                                                                 \n\
};                                                                                  \n\
                                                                                    \n\
struct Attenuation                                                                  \n\
{                                                                                   \n\
    float Constant;                                                                 \n\
    float Linear;                                                                   \n\
    float Exp;                                                                      \n\
};                                                                                  \n\
                                                                                    \n\
struct PointLight                                                                           \n\
{                                                                                           \n\
    struct BaseLight Base;                                                                  \n\
    vec3 Position;                                                                          \n\
    Attenuation Atten;                                                                      \n\
};                                                                                          \n\
                                                                                            \n\
struct SpotLight                                                                            \n\
{                                                                                           \n\
    struct PointLight Base;                                                                 \n\
    vec3 Direction;                                                                         \n\
    float Cutoff;                                                                           \n\
};                                                                                          \n\
                                                                                            \n\
uniform int gNumPointLights;                                                                \n\
uniform int gNumSpotLights;                                                                 \n\
uniform DirectionalLight gDirectionalLight;                                                 \n\
uniform PointLight gPointLights[MAX_POINT_LIGHTS];                                          \n\
uniform SpotLight gSpotLights[MAX_SPOT_LIGHTS];                                             \n\
uniform sampler2D gColorMap;                                                                \n\
uniform sampler2D gShadowMap;                                                               \n\
uniform sampler2D gNormalMap;                                                               \n\
uniform vec3 gEyeWorldPos;                                                                  \n\
uniform float gMatSpecularIntensity;                                                        \n\
uniform float gSpecularPower;                                                               \n\
                                                                                            \n\
float CalcShadowFactor(vec4 LightSpacePos)                                                  \n\
{                                                                                           \n\
    vec3 ProjCoords = LightSpacePos.xyz / LightSpacePos.w;                                  \n\
    vec2 UVCoords;                                                                          \n\
    UVCoords.x = 0.5 * ProjCoords.x + 0.5;                                                  \n\
    UVCoords.y = 0.5 * ProjCoords.y + 0.5;                                                  \n\
    float Depth = texture(gShadowMap, UVCoords).x;                                          \n\
    if (Depth <= (ProjCoords.z + 0.005))                                                    \n\
        return 0.5;                                                                         \n\
    else                                                                                    \n\
        return 1.0;                                                                         \n\
}                                                                                           \n\
                                                                                            \n\
vec4 CalcLightInternal(struct BaseLight Light, vec3 LightDirection, vec3 Normal,            \n\
                       float ShadowFactor)                                                  \n\
{                                                                                           \n\
    vec4 AmbientColor = vec4(Light.Color, 1.0f) * Light.AmbientIntensity;                   \n\
    float DiffuseFactor = dot(Normal, -LightDirection);                                     \n\
                                                                                            \n\
    vec4 DiffuseColor  = vec4(0, 0, 0, 0);                                                  \n\
    vec4 SpecularColor = vec4(0, 0, 0, 0);                                                  \n\
                                                                                            \n\
    if (DiffuseFactor > 0) {                                                                \n\
        DiffuseColor = vec4(Light.Color, 1.0f) * Light.DiffuseIntensity * DiffuseFactor;    \n\
                                                                                            \n\
        vec3 VertexToEye = normalize(gEyeWorldPos - WorldPos0);                             \n\
        vec3 LightReflect = normalize(reflect(LightDirection, Normal));                     \n\
        float SpecularFactor = dot(VertexToEye, LightReflect);                              \n\
        SpecularFactor = pow(SpecularFactor, gSpecularPower);                               \n\
        if (SpecularFactor > 0) {                                                           \n\
            SpecularColor = vec4(Light.Color, 1.0f) *                                       \n\
                            gMatSpecularIntensity * SpecularFactor;                         \n\
        }                                                                                   \n\
    }                                                                                       \n\
                                                                                            \n\
    return (AmbientColor + ShadowFactor * (DiffuseColor + SpecularColor));                  \n\
}                                                                                           \n\
                                                                                            \n\
vec4 CalcDirectionalLight(vec3 Normal)                                                      \n\
{                                                                                                \n\
    return CalcLightInternal(gDirectionalLight.Base, gDirectionalLight.Direction, Normal, 1.0);  \n\
}                                                                                                \n\
                                                                                            \n\
vec4 CalcPointLight(struct PointLight l, vec3 Normal, vec4 LightSpacePos)                   \n\
{                                                                                           \n\
    vec3 LightDirection = WorldPos0 - l.Position;                                           \n\
    float Distance = length(LightDirection);                                                \n\
    LightDirection = normalize(LightDirection);                                             \n\
    float ShadowFactor = CalcShadowFactor(LightSpacePos);                                   \n\
                                                                                            \n\
    vec4 Color = CalcLightInternal(l.Base, LightDirection, Normal, ShadowFactor);           \n\
    float Attenuation =  l.Atten.Constant +                                                 \n\
                         l.Atten.Linear * Distance +                                        \n\
                         l.Atten.Exp * Distance * Distance;                                 \n\
                                                                                            \n\
    return Color / Attenuation;                                                             \n\
}                                                                                           \n\
                                                                                            \n\
vec4 CalcSpotLight(struct SpotLight l, vec3 Normal, vec4 LightSpacePos)                     \n\
{                                                                                           \n\
    vec3 LightToPixel = normalize(WorldPos0 - l.Base.Position);                             \n\
    float SpotFactor = dot(LightToPixel, l.Direction);                                      \n\
                                                                                            \n\
    if (SpotFactor > l.Cutoff) {                                                            \n\
        vec4 Color = CalcPointLight(l.Base, Normal, LightSpacePos);                         \n\
        return Color * (1.0 - (1.0 - SpotFactor) * 1.0/(1.0 - l.Cutoff));                   \n\
    }                                                                                       \n\
    else {                                                                                  \n\
        return vec4(0,0,0,0);                                                               \n\
    }                                                                                       \n\
}                                                                                           \n\
                                                                                            \n\
vec3 CalcBumpedNormal()                                                                     \n\
{                                                                                           \n\
    vec3 Normal = normalize(Normal0);                                                       \n\
    vec3 Tangent = normalize(Tangent0);                                                     \n\
    Tangent = normalize(Tangent - dot(Tangent, Normal) * Normal);                           \n\
    vec3 Bitangent = cross(Tangent, Normal);                                                \n\
    vec3 BumpMapNormal = texture(gNormalMap, TexCoord0).xyz;                                \n\
    BumpMapNormal = 2.0 * BumpMapNormal - vec3(1.0, 1.0, 1.0);                              \n\
    vec3 NewNormal;                                                                         \n\
    mat3 TBN = mat3(Tangent, Bitangent, Normal);                                            \n\
    NewNormal = TBN * BumpMapNormal;                                                        \n\
    NewNormal = normalize(NewNormal);                                                       \n\
    return NewNormal;                                                                       \n\
}                                                                                           \n\
                                                                                            \n\
void main()                                                                                 \n\
{                                                                                           \n\
    vec3 Normal = CalcBumpedNormal();                                                       \n\
    vec4 TotalLight = CalcDirectionalLight(Normal);                                         \n\
                                                                                            \n\
    for (int i = 0 ; i < gNumPointLights ; i++) {                                           \n\
        TotalLight += CalcPointLight(gPointLights[i], Normal, LightSpacePos);               \n\
    }                                                                                       \n\
                                                                                            \n\
    for (int i = 0 ; i < gNumSpotLights ; i++) {                                            \n\
        TotalLight += CalcSpotLight(gSpotLights[i], Normal, LightSpacePos);                 \n\
    }                                                                                       \n\
                                                                                            \n\
    vec4 SampledColor = texture2D(gColorMap, TexCoord0.xy);                                 \n\
    FragColor = SampledColor * TotalLight;                                                  \n\
}";
struct BaseLight Base;