2011-06-03 2 views
3

Je n'arrive pas à obtenir le bon ombrage sur toutes les faces du cube que j'ai dessiné. Je reçois une transition en douceur de l'un des visages à un autre visage qui ne montre pas le bord correctement.OpenGL ES 2.0 spécifiant des normales pour le vertex shader

Un visage différent (où j'obtiens le bord désiré), j'obtiens l'ombrage tel qu'il montre les deux triangles qui composent ce visage. Je crois que le problème est avec les normales que je spécifie. Je joins mon vertex et ma matrice normale et mon code de vertex et fragment shader. le vertex et la matrice normale sont identiques.

Je suppose que le problème est avec les normales mais j'ai essayé presque tout avec elles mais l'effet ne change pas.

//normal matrix and vertex matrix are same 

static const float normals[]= 

    { 
     //v0,v1,v2,v3, 
     //v4,v5,v6,v7 
     0.5,0.5,0.5, -0.5,0.5,0.5, -0.5,-0.5,0.5, 0.5,-0.5,0.5, 

     0.5,0.5,-0.5, -0.5,0.5,-0.5, -0.5,-0.5,-0.5, 0.5,-0.5,-0.5 

    }; 

//vertex shader 

attribute vec4 color; 
attribute vec4 position; 

attribute vec4 normal; 

uniform mat4 u_mvpMatrix; 
uniform vec4 lightDirection; 
uniform vec4 lightDiffuseColor; 
uniform float translate; 

varying vec4 frontColor; 



//varying vec4 colorVarying; 



void main() 

{ 

    vec4 normalizedNormal = normalize(u_mvpMatrix* normal); 
    vec4 normalizedLightDirection = normalize(lightDirection); 

    float nDotL = max(dot(normalizedNormal, normalizedLightDirection), 0.0); 


    frontColor = color * nDotL * lightDiffuseColor; 


    gl_Position = u_mvpMatrix * position; 


} 

//fragment shader 

varying lowp vec4 frontColor; 

void main() 
{ 


     gl_FragColor = frontColor; 


} 

Aidez-nous! Merci d'avance !!

+0

Vous savez, vous n'êtes pas censé répondre à votre question de l'élaborer. Je suis tombé sur votre réponse par accident. Si vous voulez communiquer sur une réponse donnée, vous êtes censé 'ajouter un commentaire'; De cette façon, l'affiche est notifiée et peut répondre. Ensuite, pour le nouveau matériel de question, il est habituel d'éditer la question originale pour ajouter plus d'information. – rotoglup

+0

Apparemment, votre réponse a été supprimée, il serait utile que vous affichiez une capture d'écran de votre problème. – rotoglup

Répondre

2

Votre problème n'est pas lié à votre matrice normale, il est lié à vos normales d'entrée. D'après ce que j'ai lu, vous fournissez 8 normales, une pour chaque sommet, ce qui signifie que vous fournissez des normales pré-moyennées; votre vertex shader ne peut en aucun cas les décomposer. Pour avoir des discontinuités correctes dans votre éclairage, vous avez besoin de normales discontinues: pour chaque quad, vous avez 4 sommets, chacun avec une normale correspondant au quad normal. Donc vous finissez par 6x4 = 24 normales (donc autant de sommets).

Vous pouvez jeter un oeil à cela pour une explication plus détaillée: http://www.songho.ca/opengl/gl_vertexarray.html