퐁 음영을 사용하지 않으려 고합니다. 나는 셰이더를 약간 쌓아 올리고있다. (그것은 그 자체로 문제가 될 수있다.) 그러나 여기에 내가 현재있는 곳이다. 내 결과 (유타 찻 주전자)를 내 검은 색 바탕에 흰색 이미지로 출력 할 것으로 기대합니다. 버텍스 쉐이더에서 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가 현재 설정되지 않는 것을 언급 할 가치가있을 수 있습니다. 이전에 비슷한 결과를 얻으 려 시도했습니다. 내 이해는 그들이 기본값으로 설정되어야한다는 것입니다.
18 번 줄에서 w를 0.0 또는 1.0으로 설정해야합니까? – user1118321
@ user1118321 법선은 벡터이므로 번역은 적용되지 않으며 값은 0이어야합니다. – kevintodisco
아 물론. 좋은 지적. – user1118321