2014-04-16 4 views
0

저는 C++을 사용하고 확산 형 셰이더를 구현할 때 모든 다른 삼각형이 사라집니다. Cube OBJOpenGL 누락 된 삼각형 확산 셰이더

Torus OBJ

필요하다면 내 렌더링 코드를 게시 할 수 있습니다, 그러나 나는 (I 모델 뷰 행렬의 전치 역 할을 쓴) 문제가 내 정상 매트릭스 믿습니다. 다음은 등대 튜토리얼의 튜토리얼과 비슷한 일종의 셰이더 코드입니다. 정점 셰이더

#version 330 

layout(location=0) in vec3 position; 
layout(location=1) in vec3 normal; 

uniform mat4 transform_matrix; 
uniform mat4 view_model_matrix; 
uniform mat4 normal_matrix; 
uniform vec3 light_pos; 

out vec3 light_intensity; 

void main() 
{ 
    vec3 tnorm = normalize(normal_matrix * vec4(normal, 1.0)).xyz; 
    vec4 eye_coords = transform_matrix * vec4(position, 1.0); 
    vec3 s = normalize(vec3(light_pos - eye_coords.xyz)).xyz; 

    vec3 light_set_intensity = vec3(1.0, 1.0, 1.0); 
    vec3 diffuse_color = vec3(0.5, 0.5, 0.5); 

    light_intensity = light_set_intensity * diffuse_color * max(dot(s, tnorm), 0.0); 
    gl_Position = transform_matrix * vec4(position, 1.0); 
} 

내 프래그먼트 쉐이더는 색상의 형태 "light_intensity"을 출력한다. 내 모델은 Blender에서 직접적으로 왔으며 정점 순서를 유지하는 것과 같은 다양한 내보내기 옵션을 시도했지만 아무 것도 효과가 없었습니다.

+1

은의 순서를 변경 시도 삼각형 중 하나에있는 정점. 그것은 굴곡 문제가있는 것 같아 –

+0

당신은 모델을 바꾸는 것을 말하고 있습니까? – HarrisonG16

+0

예, 얼굴이 같은 와인딩을 따라 가지 않은 것 같습니다. 꼭지점 순서로 조금 연주 해보십시오. –

답변

0

쉐이더와 관련이 없습니다.

깊이 테스트와 관련이있는 것으로 보입니다. 여기에서 카메라의 가장 가까운 픽셀 만 그려지는 것이 아니므로 뷰포트에 상대적인 깊이의 삼각형 순서가 엉망입니다.

깊이 테스트를 사용하고 렌더링 대상에 z 버퍼가 연결되어 있는지 확인하십시오. 여기에 대해 자세히 알아보기 :

Triangles of the cube with wrong depth test.

http://www.opengl.org/wiki/Depth_Test 만 삼각형 뷰어로 볼 수 있어야합니다 빨간색으로 강조. 유효한 깊이 테스트가 없기 때문에 어떤 삼각형이 가장 많이 칠해 지는지를 보장 할 수있는 기회가 없습니다. 따라서 보이지 않아야하는 얼굴의 파란색 삼각형은 이전에 그려진 빨간색 삼각형의 부분을 덮을 것입니다.

z 버퍼의 깊이와 현재 순간에 그려지는 픽셀의 깊이를 비교하면 깊이 테스트에서이를 생략 할 수 있습니다. 뷰어에 더 가까운, 즉 버퍼 내의 z 값보다 작은 z 값을 갖는 픽셀의 색 정보 만이 정확한 결과를 얻기 위해 프레임 버퍼에 기록되어야한다.

(백 페이스 컬링은 모델이 제대로 내보낼 경우도 올바르게 표시 할 수 있습니다. 그러나 그것은 단지 그것을 해결하지, 주요 문제를 숨겨도 좋을와 것입니다.)

+0

잘 모르시고, 약간의 깊이 테스트가 잘 작동하는 것 같습니다 (윗면을보세요). –

+0

윗면이 운일지도 모릅니다. 그것은 마지막으로 그려진 마지막 얼굴 일뿐입니다. (윗면을 덮을 수있는 얼굴들 중) – meandbug

+0

앞쪽의 왼쪽 얼굴 만이 깊이 테스트 문제로 생각할 수 있습니다. 나는 확실히 확신하지 못합니다. –

관련 문제