2013-04-12 3 views
-1

저는 비주얼 스튜디오 2010 C++에서 그리고 GLSL을 사용하여 프래그먼트 당 조명 작업을하고 있습니다. 그리고 어떤 이유로 프래그먼트 쉐이더에만 문제가 있습니다. 작동하는 쉐이더 및 모든 버텍스 쉐이더가 작동하므로이 특정 녀석과 관련이 있습니다. 기본적으로 내 쉐이더는 다음과 같습니다.GLSL 프래그먼트 쉐이더에서 예상치 못한 파일 끝

#version 120 

varying vec3 normal; 
varying vec3 lightDir; 
varying vec4 ambient; 
varying vec4 diffuse; 

void main() 
{ 
float NdotL = max(dot(lightDir,normalize(normal)),0.0); 
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb), gl_FrontMaterial.diffuse.a); 
} 

아무도 도와 줄 수있는 아이디어가 있습니까? 이미 말했듯이, 이미 여러 쉐이더를 프로그램에로드했지만이 녀석 만 작동하지 않습니다.

EDIT : vec3을 float로 전환해도 여전히 동일한 문제가 발생합니다. 해프!

+0

당신이 받아 대답을 무효화 질문을 변경할 수 없습니다. –

답변

0

dot(lightDir,normalize(normal))은 내적입니다. 따라서 스칼라를 반환합니다.

max(scalar, scalar)도 스칼라로 평가됩니다. 따라서

: 벡터에 스칼라를 할당 할

vec3 NdotL = max(dot(lightDir,normalize(normal)),0.0); 

시도합니다. 어느 것이 무효입니다. 당신은 아마 원하는 그래서

했다 :

float NdotL = max(dot(lightDir,normalize(normal)),0.0); 
gl_FragColor = vec4((NdotL * diffuse.rgb + ambient.rgb), gl_FrontMaterial.diffuse.a); 
+0

나는 여전히 동일한 문제, 다른 해결책을 얻으려고 했는가? – user2272511

+0

'varying'을 변수'NdotL'을'float'로,'gl_FrontMaterial.diffuse.a'를 상수로 변환 한 코드는 GLSL 샌드 박스 (http://www.mrdoob.com/)를 통해 잘 돌아갔습니다. projects/glsl_sandbox/그래서 나는 다른 아이디어를 즉시 가지고 있지 않습니다 - 일부 GLSL 구현은 파일의 끝에 개행을 요구합니다. 그 중 하나가 있습니까? – Tommy

+0

나는 고쳐 줘서 고맙다. 노트북을 고치지 않고 끊을 것이다. < – user2272511

관련 문제