나는 하이트 맵에서 생성 된 맵을 포함하는 씬을 가지고있다. 나는지도 지오메트리가 원점을 가로 지르도록지도가 위 또는 아래로 움직이는 X 및 Y 축 주위로이지도를 움직일 수 있습니다. 지도 위에 놓여있는 하나의 빛이 있는데, 항상 x와 y 좌표에서 기하학 높이보다 5 단위 위에 위치합니다.조명 계산으로 인해 색상이 검은 색으로 점프하는 이유는 무엇입니까?
카메라가 장면의 원점 근처에 있으면 모든 조명이 정상적으로 작동합니다. 그러나 그로부터 멀어 질수록 더 많은 삼각형이 먼저 밝은 흰색으로 빠르게 뛰어 오르고 그 후에는 거의 즉시 검정색이됩니다. 나는 이것을 일으키는 원인을 알아낼 수 없었다.
- 컨테이너 인스턴스는 OpenGL 상태
- 쉐이더 노드 아래 셰이더 쌍 활성화를 변경하지 않는다 : 여기서 는 장면 그래프의 구조의 개요이다.
- 고정 기능 파이프 라인을 사용할 때도 문제가 있습니다.
- 장면은 번역 내가 문제가 현장의 건설에있다 꽤 확신 씬 그래프
을 렌더링하기 전에 회전,하지만 난 완전히 확실하지 않다된다.
다음은 효과의 일부 스크린 샷입니다. 먼저, 광이 카메라에 가까운 한, 상기 카메라가 먼 거리 장면 원점으로부터의 위치 :
주 광은 적색 동그라미로 표시 구형으로 도시되어있다. 둘째, 빛이 카메라에서 멀리 하나 :
은 또한 참조를 위해 법선을 그리기입니다. 이 그림에서 볼 수있는 광선은 카메라에 대한 광원의 위치에 관계없이 항상 나타납니다.
여기 내 셰이더가 있습니다.
버텍스 쉐이더 :
varying vec3 normal;
varying vec3 position;
void main(void)
{
gl_Position = ftransform();
gl_TexCoord[0] = gl_MultiTexCoord0;
normal = gl_NormalMatrix * gl_Normal;
position = (gl_ModelViewMatrix * gl_Vertex).xyz;
}
조각 쉐이더 :
varying vec3 normal;
varying vec3 position;
vec4 lightSource(vec3 norm, vec3 view, gl_LightSourceParameters light)
{
vec3 lightVector = normalize(light.position.xyz - view);
vec3 reflection = normalize(lightVector - view.xyz);
float diffuseFactor = max(0, dot(norm, lightVector));
float specularDot = max(0, dot(norm, reflection));
float specularFactor = pow(specularDot, gl_FrontMaterial.shininess);
return
gl_FrontMaterial.ambient * light.ambient +
gl_FrontMaterial.diffuse * light.diffuse * diffuseFactor +
gl_FrontMaterial.specular * light.specular * specularFactor;
}
vec4 lighting()
{
// normal might be damaged by linear interpolation.
vec3 norm = normalize(normal);
return
gl_FrontMaterial.emission +
gl_FrontMaterial.ambient * gl_LightModel.ambient +
lightSource(norm, position, gl_LightSource[0]);
}
void main()
{
gl_FragColor = lighting();
}