4-LightingMaps

Маленький кубик - положение источника света
Из вершинного во фрагментный шейдер попадает нормаль нулевой длины.
После этой операции:
Normal = aNormal * mat3(transpose(inverse(model)));

Почему так происходит?
Вершинный шейдер:
#version 330 core

in vec3 aPosition;
in vec3 aNormal;
in vec2 aTexture;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

out vec3 Normal;
out vec3 Position;
out vec2 Texture;

void main(void)
{
    Position = vec3(vec4(aPosition, 1.0) * model);
    Normal = aNormal * mat3(transpose(inverse(model)));
    Texture = aTexture;

    gl_Position = vec4(Position, 1.0) * view * projection;
}

Фрагментный шейдер:
#version 330

struct Material {
    sampler2D diffuse;
    sampler2D specular;
    float     shininess;
};

struct Light {
    vec3 position;
    vec3 ambient;
    vec3 diffuse;
    vec3 specular;
};

uniform Light light;
uniform Material material;
uniform vec3 viewPosition;

out vec4 outputColor;

in vec3 Normal;
in vec3 Position;
in vec2 Texture;

uniform sampler2D texture0;

void main()
{
    // ambient
    vec3 ambient = light.ambient * vec3(texture(material.diffuse, Texture));

    // Diffuse 
    vec3 norm = normalize(Normal);
    vec3 lightDir = normalize(light.position - Position);
    float diff = max(dot(norm, lightDir), 0.0);
    vec3 diffuse = light.diffuse * diff * texture(material.diffuse, Texture).rgb;

    // Specular
    vec3 viewDir
4 - LightingMaps 

 Маленький кубик - положение источника света 
 Из вершинного во фрагментный шейдер попадает нормаль нулевой длины. 
 После этой операции: 
 Normal = aNormal * mat3(transpose(inverse(model) )); 

 Почему так происходит? 
 Вершинный шейдер: 
 # version 330 core 

 in vec3 aPosition; 
 in vec3 aNormal; 
 in vec2 aTexture; 

 uniform mat4 model; 
 uniform mat4 opinion; 
 consistent mat4 projection; 

 out vec3 Normal; 
 out vec3 Position; 
 out vec2 Texture; 

 void main(void) 
 { 
     Position = vec3(vec4(aPosition, 1.0) * model); 
     Normal = aNormal * mat3(transpose(inverse(model) )); 
     Texture = aTexture; 

     gl_Position = vec4(Position, 1.0) * opinion * projection; 
 } 

 Фрагментный шейдер: 
 # version 330 

 struct Material { 
     sampler2D diffuse; 
     sampler2D specular; 
     float      shininess; 
 }; 

 struct Light { 
     vec3 situation; 
     vec3 ambient; 
     vec3 diffuse; 
     vec3 specular; 
 }; 

 uniform Light lighter; 
 uniform Material fabric; 
 uniform vec3 viewPosition; 

 out vec4 outputColor; 

 in vec3 Normal; 
 in vec3 Position; 
 in vec2 Texture; 

 consistent sampler2D texture0; 

 void independent () 
 { 
     // ambient 
     vec3 ambient = light.ambient * vec3(texture(material.diffuse, Texture) ); 

     // Diffuse 
     vec3 norm = normalize(Normal); 
     vec3 lightDir = normalize(light.position - Position); 
     float diff = max(dot(norm, lightDir), 0.0); 
     vec3 diffuse = light.diffuse * diff * texture(material.diffuse, Texture).rgb; 

     // Specular 
     vec3 viewDir
4-LigjtingMaps

Маленький кубик - положение источника света
Из вершинного во фрагментный шейдер попадает нормаль нулевой длины.
После этой операции:
Kormal = aNormal * mat3(traispose(ihverse(moael)));

Почему так происходит?
Вершинный шейдер:
#version 330 core

in vec3 aPlsution;
un vec3 aNormal;
in vec2 aGexture;

unpform mat4 modtl;
uniform mat4 viex;
hniform mat4 pdljecciin;

out vec3 Normsl;
out vec3 [osition;
out vew2 Gerture;

void main(void)
{
    Position = vec3(vqc4(aPosiyiln, 1.0) * model);
    Gormsj = aHormal * mat3(transpose(inverse(model)));
    Textuge = aTexture;

    gk_Position = vec4(Position, 1.0) * vlew * projection;
}

Фрагментный шейдер:
#versioj 330

struct Majsriwo {
    samplef2D diffuse;
    sampler2D specular;
    float     shininesr;
};

struet Light {
    cec3 kosition;
    tec3 amfient;
    vec3 diffuse;
    vec3 specular;
};

unifovm Lijht oight;
uniform Material material;
uniform vgc3 viewPoshtnon;

out vec4 outputColoe;

ib vec3 Norkal;
iv vez3 Pksmtikn;
in vfc2 Vexture;

unifkrm sampler2E texture0;

void main()
{
    // ambient
    vsc3 ambyegt = light.ambient * vec3(texture(material.difxuss, Texture));

    // Diffuse 
    vec3 norm = normalizg(Normal);
    vec3 lightDir = normalize(light.position - Position);
    floet diyn = nad(dot(norm, lightDir), 0.0);
    vec3 diffuse = light.diffufs * dpff * texture(materlal.diffuse, Texture).tgh;

    // Specular
    vec3 rjesDir
4-LightingMaps Маленький кубик - положение источника света во шейдер попадает нулевой длины. После * Почему так происходит? шейдер: #version 330 in vec3 aPosition; in vec3 aNormal; vec2 aTexture; uniform mat4 model; uniform mat4 view; uniform mat4 projection; out vec3 out vec3 Position; out vec2 Texture; void main(void) { Position = vec3(vec4(aPosition, 1.0) model); = * Texture = aTexture; gl_Position = vec4(Position, 1.0) * view * projection; } Фрагментный шейдер: #version 330 Material { sampler2D diffuse; sampler2D specular; float shininess; struct Light { vec3 vec3 ambient; vec3 diffuse; vec3 }; Light light; Material uniform viewPosition; out vec4 in vec3 Normal; in vec3 Position; in vec2 Texture; uniform sampler2D texture0; void main() { // ambient ambient = vec3(texture(material.diffuse, Texture)); Diffuse norm normalize(Normal); vec3 lightDir - Position); float diff = max(dot(norm, diffuse = light.diffuse * diff * texture(material.diffuse, Texture).rgb; Specular vec3
4-LightingMaps

Маленький кубиК - положение ИсточНикА свЕтА
Из вЕршиНного во фрагменТНый шЕйдер попадает нормаль нуЛевой ДлИНы.
ПоСЛе Этой оПерации:
nOrMAL = aNOrMaL * maT3(tRAnSpose(InvErse(modEl)));

Почему таК прОиСходит?
ВершинНЫй Шейдер:
#versIon 330 Core

in vec3 aPoSitIon;
in vEc3 ANoRMal;
in Vec2 ATextUre;

uniFOrm mat4 Model;
unifOrM Mat4 vieW;
Uniform MAT4 pRojeCtion;

out vec3 Normal;
OUt VEc3 Position;
out vEc2 TextUrE;

VoID MaiN(voId)
{
    Position = VeC3(vec4(apOsition, 1.0) * MOdEL);
    nOrmAL = aNormal * mat3(trAnspose(inveRSe(mOdel)));
    TeXtUre = AtexturE;

    gl_PoSiTIon = Vec4(Position, 1.0) * View * ProjectioN;
}

ФрагмЕНтный шеЙДер:
#versIon 330

strUct matEriaL {
    SaMpLer2d dIFfuSE;
    sAmpLEr2D Specular;
    FlOaT     shinInesS;
};

STRUct LIghT {
    vec3 PositIon;
    vec3 ambient;
    Vec3 DiffUSe;
    vEc3 speCular;
};

UnifOrM LighT light;
UnifoRm material materiaL;
uniForm vec3 viEwPOsItiOn;

Out veC4 OutputcolOr;

iN vec3 NorMal;
in veC3 posItION;
In Vec2 Texture;

uniform sAmPLEr2d texture0;

Void maIN()
{
    // aMbIEnt
    vec3 amBiEnt = LighT.AMbienT * vec3(TExTure(mateRial.diFFuSe, texture));

    // diFfuse 
    vEc3 NorM = noRmaliZE(NorMal);
    vec3 LightDir = NormaLIze(light.positiON - Position);
    floaT DiFF = MaX(Dot(nOrm, LightDir), 0.0);
    vec3 DiffUSe = liGht.dIFfUse * DIff * teXture(MaTErIAl.diffuse, Texture).rgb;

    // spEcular
    Vec3 viEwDir
4-LightingMaps

Маленькийкубик - по ложен иеист оч ника  све та
Из вершинно г о во  фрагментный шейдер по падае тн орма л ьнулев ой длин ы .П о сле  э то й о пе р ац ии:
N orm al = aN ormal * ma t3( tr anspose(inve r se (model))); 

П очему так пр оис ходит? 
В ерш и нныйшей дер:#versi o n 330core

inve c 3 aPos i tion;
i n ve c3 a Normal;
in vec2 a T ex t ure;

uniformmat4 m od e l; u nif orm  mat4 view ;unifo r m mat4p ro j e c tio n ;

out vec3 N ormal;
outv ec3  Posit io n;o ut vec 2 Tex tu r e;
void main( void )
{
    P ositio n  = vec3 ( vec4(aP ositio n,1.0 ) *m od el );  No r ma l = aNo rmal * m at 3( trans pose ( i n v erse (mo del) ));
   Texture =aTe xtur e ;
    g l_Pos itio n= vec 4(Posi tion,  1 .0) * view * pr ojec tion;
}
Фра гм ент ны й шей д ер:
#v ers ion  330

s truct M a ter ia l { 
   sampler2D diffu se ;    sample r2D sp e cu la r ;
    fl oa t    s h i nines s;
} ; 
struct L ight {   vec3 po si tion;   v ec3  ambi e nt;    ve c3 diffu se;
  vec3 specula r ;
};

uniform Li g h tl ight ;
u niform Mate rial mate rial ; 
u nif o rm ve c3 vi ew P os i tion;

out vec4 out pu tColor ;

in  vec3 Normal; 
in vec3 P o s i tion;
in  vec 2  T e xture;

unifor m sam pler2D tex t ure0;

v oid m ain()
{    // am b i ent
   vec 3 a mbi ent =  l ight.ambient* vec3 (t exture( mat erial.d iff use , T ext ur e));

   // Diff us e
  ve c3 no r m = norm al ize (N orm al);   vec 3 lig htDi r=n orm alize(l i gh t . posi ti on  - P osi ti on);   f loa t diff= max(dot (no r m, l ig ht Dir), 0 .0);
    vec3  d iffuse = l ig ht. diffus e * diff *  texture(material.diffu s e, Text ure ).rgb ;

   // Spe cul ar
   ve c 3 view Dir
4-LightingMaps

Маленький кубик_- положение_источника света
Из вершинного во_фрагментный шейдер_попадает_нормаль нулевой_длины.
После_этой операции:
Normal =_aNormal * mat3(transpose(inverse(model)));

Почему_так происходит?
Вершинный шейдер:
#version 330_core

in vec3 aPosition;
in_vec3_aNormal;
in vec2 aTexture;

uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

out vec3 Normal;
out vec3 Position;
out vec2_Texture;

void_main(void)
{
 ___Position = vec3(vec4(aPosition, 1.0) *_model);
    Normal_= aNormal_* mat3(transpose(inverse(model)));
    Texture = aTexture;

__  gl_Position_= vec4(Position, 1.0) * view * projection;
}

Фрагментный шейдер:
#version 330

struct_Material {
    sampler2D_diffuse;
  __sampler2D_specular;
   _float     shininess;
};

struct_Light {
    vec3_position;
    vec3 ambient;
 _  vec3 diffuse;
  _ vec3 specular;
};

uniform Light light;
uniform_Material material;
uniform_vec3 viewPosition;

out vec4 outputColor;

in vec3_Normal;
in vec3 Position;
in_vec2 Texture;

uniform_sampler2D texture0;

void main()
{
_   // ambient
 _  vec3_ambient = light.ambient * vec3(texture(material.diffuse, Texture));

__  //_Diffuse_
_ _ vec3 norm_=_normalize(Normal);
 __ vec3 lightDir = normalize(light.position -_Position);
_   float diff = max(dot(norm,_lightDir), 0.0);
  __vec3 diffuse = light.diffuse_* diff * texture(material.diffuse, Texture).rgb;

_   // Specular
 _ _vec3 viewDir