2012-03-25 1 views
3

퐁 음영을 사용하지 않으려 고합니다. 나는 셰이더를 약간 쌓아 올리고있다. (그것은 그 자체로 문제가 될 수있다.) 그러나 여기에 내가 현재있는 곳이다. 내 결과 (유타 찻 주전자)를 내 검은 색 바탕에 흰색 이미지로 출력 할 것으로 기대합니다. 버텍스 쉐이더에서 18 번째 줄을 제거하면 올바르게 처리되지만, 줄이 있으면 출력이없고 오류도 발생하지 않습니다. 어떤 아이디어?GLSL Vertex Shader가 디스플레이없이 컴파일됩니다.

조각 쉐이더 :

1 #version 120                      
    2                         
    3 varying vec3 vertexNormal;                   
    4 varying vec3 cameraSpacePos;                  
    5                         
    6 vec3 calcSpecular(vec3 l, vec3 n, vec3 v, vec3 cL, vec3 cS, float p)        
    7 {                         
    8  vec3 r = 2.0 * n * (n * l) - l;                
    9  return cL * cS * pow(max(0.0, dot(r, v)), p);             
10 }                         
11                         
12 vec3 calcDiffuse(vec3 l, vec3 n, vec3 cL, vec3 cD)             
13 {                         
14  return cL * cD * max(0.0, dot(n, l));               
15 }                         
16                         
17 void main(void)                     
18 {                         
19  vec3 lightDirection = normalize(vec3(-1.0, 0.0, -1.0));          
20  vec3 objectColor = vec3(0.5, 0.0, 0.0);              
21  vec3 ambientColor = vec3(0.1, 0.1, 0.1);              
22  vec3 lightColor  = vec3(0.3, 0.0, 0.3);              
23  vec3 specularColor = vec3(1.0, 1.0, 1.0);              
24                         
25  gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);              
26 }     

버텍스 쉐이더는 :

1 #version 120 
    2 
    3 uniform mat4 modelView; 
    4 uniform mat4 normalModelView; 
    5 uniform mat4 projection; 
    6 
    7 attribute vec3 position; 
    8 attribute vec3 normal; 
    9 
10 varying vec3 vertexNormal; 
11 varying vec3 cameraSpacePos; 
12 
13 void main(void) 
14 { 
15  vec4 tmpCameraSpacePos = modelView * vec4(position, 1.0); 
16  gl_Position = projection * tmpCameraSpacePos; 
17 
18  vertexNormal = (normalModelView * vec4(normal, 0.0)).xyz; 
19  cameraSpacePos = (tmpCameraSpacePos).xyz; 
20 
21 } 
22 

또한 정상 및 normalModelView가 현재 설정되지 않는 것을 언급 할 가치가있을 수 있습니다. 이전에 비슷한 결과를 얻으 려 시도했습니다. 내 이해는 그들이 기본값으로 설정되어야한다는 것입니다.

+0

18 번 줄에서 w를 0.0 또는 1.0으로 설정해야합니까? – user1118321

+1

@ user1118321 법선은 벡터이므로 번역은 적용되지 않으며 값은 0이어야합니다. – kevintodisco

+0

아 물론. 좋은 지적. – user1118321

답변

1

normalnormalModelView이 설정되지 않았기 때문에 기본값으로 설정되지 않고 기술적으로 잘못된 데이터라고 생각합니다. 셰이더에서 잘못된 데이터가 사용되면 결과가 정의되지 않으며 셰이더를 디버그하기 어려운 이유 중 일부입니다. 코드에서 변수를 참조하기 전에 변수에 대한 값을 제공하고 있는지 확인하십시오.

+0

네, 그게 문제였습니다. 나는 이전에 그 행동이 (적어도 행렬에 대해) 정의되었다는 것을 읽었다 고 생각했지만 그 것이 문제가되었다. – Kyle