2017-11-19 16 views
-1

아래 이미지에서 볼 수있는 것처럼 프래그먼트 셰이더에 문제가 있습니다.GLSL을 사용하는 투명한 셰이더

enter image description here

나는 시계 방향과 반 시계 방향으로 이 발췌하는 내가 패스에있는 이미지 빨간색에있는 부분을 렌더링하고 싶지 않아 내가 카메라로 정상의 내적을 받고 있어요 위치 0 미만 제가 투명 조각 세트는 별도로 여기 fargment 폐기하면 셰이더

#version 100 

precision mediump float; 

varying float lightDiffuse; 

void main() 
{ 
    float light = (1.0 - lightDiffuse) * 0.5; 
    vec3 lightColor = vec3(0.0,1.0,1.0); 
    vec3 diffuseColor = lightColor * light ; 

    vec4 c; 
    if(lightDiffuse <0.0) 
    { 
     // back faces, opaque 
     // front faces, very transparent 
     c = vec4(diffuseColor, 0.2); 
    } 
    else 
    { 
     discard; 
    } 

    gl_FragColor = c; 
} 

,691,363에게 인 (210)
#version 100 
#define lowp 
#define mediump 
#define highp 

attribute vec4 vertex; 
attribute vec3 normal; 

uniform mat4 normalMatrix; 
uniform mat4 modelViewProjectionMatrix; 
uniform mat4 modelView; 
uniform vec3 camera_world_position; 

varying highp float lightDiffuse; 

void main() 
{  
    gl_Position = modelViewProjectionMatrix * vertex; 

    vec3 norm = normal; 
    norm *=-1.0; 
    lightDiffuse = dot(normalize(vec3(norm.x, norm.y, norm.z)), normalize(camera_world_position)); 
} 

여기에, 그것이 존재 무엇 당신이, 폐색 삼각형을 추려 깊이 버퍼를 할당하고 깊이 테스트를 사용하려면 재료 스크립트

material 44267_1508405690_0##carpaint 
{ 
    technique 
    { 
     pass 
     { 

      cull_hardware anticlockwise 
      scene_blend alpha_blend 
      vertex_program_ref char_shader2_vs100 
      { 
       param_named_auto modelViewProjectionMatrix worldviewproj_matrix 
       param_named_auto normalMatrix inverse_transpose_world_matrix 
       param_named_auto modelView worldview_matrix 
       param_named_auto camera_world_position camera_position 

      } 
      fragment_program_ref char_shader2_fs100 
      { 

      } 
     } 


    pass 
     { 

      cull_hardware clockwise 

      vertex_program_ref char_shader2_vs100 
      { 
       param_named_auto modelViewProjectionMatrix worldviewproj_matrix 
       param_named_auto normalMatrix inverse_transpose_world_matrix 
       param_named_auto modelView worldview_matrix 
       param_named_auto camera_world_position camera_position 

      } 
      fragment_program_ref char_shader2_fs100 
      { 

      } 
     } 


    } 
} 
+0

그래서 ... 무엇이 문제입니까? 당신이하고있는 일을 말하면서, 당신은 무슨 문제가 있는지 말하지 않습니다. –

+0

@NicolBolas 그림에서와 같이 겹치는 두 개의 얼굴이 보입니다. 그 효과를 버리고 싶습니다 .. 두 눈의 얼굴이 보이지 않는 것을 보길 원합니다. –

+0

알고리즘이 있습니다. 설명은 정점의 법선이 평평한 법선 일 경우에만 작동합니다. 매끄러운 메쉬를 가지고 있다면 정점 법선이 반드시 법선 법선과 같을 필요는 없습니다. 또한 정점이 둘 이상의면에서 사용되는 경우 문제가 발생합니다. – BDL

답변

0

입니다.

프래그먼트 셰이더에서 대칭 테스트를 수행하지 마십시오. 필요하지 않고 엄청나게 비쌉니다. GL_CULL_FACE을 활성화하고 올바르게 전면을 설정하십시오. 인터넷에서 다운로드 한 모든 모델이이 권리를 얻는 것은 아니므로 일부 삼각형에 대해 권선이 끊어진 입력 모델이있을 수 있습니다.