2017-02-08 11 views
0

프래그먼트 쉐이더에서 오브젝트가 평면과 교차하는 선을 그립니다.프래그먼트 쉐이더에서 오브젝트와 플레인 간의 교차를 그립니다.

평면 방정식을 프래그먼트 셰이더 (a, b, c, d)에 전달하고 내 대상과이 균일 평면 간의 교차를 빨간색으로 그립니다.

나는 교차로의 폭에 상관없이 우리가 확대 얼마나 항상 동일하지 할

을 지금 내가로 조각 쉐이더에서 비행기 내 물체의 거리를 얻을 :.

// uPlane: vec4 where values are a.b.c.d (plane equation) 
    // vPos: wodlPosition of the fragment 
    vec4 prod = uPlane*vPos; 
    float distance = (prod.r + prod.g + prod.g + prod.a)/length(uPlane.xyz); 

    if(abs(distance) < 1.) { 
    gl_FragColor = vec4(1., 0., 0., .5); 
    } else { 
    gl_FragColor = vec4(0., 1., 0., .5); 
    } 

이 방법의 문제점은 확대/축소시 교차점의 너비가 변경된다는 것입니다 (아래 스크린 샷 참조).

내 개체와 비행기 유니폼의 교차 부분에 "2px 너비"선을 그릴 때 가장 좋은 방법은 무엇입니까? 당신은 당신의보기/스케일링은 "줌 배율"을 설명해야 enter image description here

+0

어떻게 든 하나의 해결책은 조각 위치를 평면에 투영 한 다음 어떻게 든 투영 화면 좌표를 계산 한 다음 투영 화면 좌표를 조각 화면 좌표와 비교하고 해당 정보를 사용하여 선을 그립니다 – Nicolas

답변

1

enter image description here

. 2D 케이스 (사진이 거의 2D로 보임), 균일 한 스케일링 및 회전이 없으므로 매우 쉽습니다. 모델 - 뷰 행렬을 전달하고 [0] [0] 번째 요소를 추출합니다 (또는 해당 값을 쉐이더에 전달합니다). 거리 값을 나누십시오. 회전 및 변환이있는 모형 뷰 행렬에서 적절한 비율 값을 추출하는 방법은 this을 참조하십시오.