2017-05-24 11 views

답변

0

다각형이 시계 반대 방향 (즉, 정점이 ccw으로 나열된 경우) 인 경우 폴리곤의 법선 벡터를 계산하고 이것이 카메라를 향하고 있는지 확인합니다.

볼록 각을 형성하는 다각형의 세 개의 연속 된 정점 a, b, c를 찾고 법선 벡터 (b-a) x (c-b)를 계산하십시오.

1

좋아요. 정상적인 3D 문제는 아니지만 2d-games라는 태그를 사용하여 질문하는 것처럼 질문이 다소 모호합니다. 그러나 2D는 다각형 시계 방향 (CW) 또는 반 시계 방향 (CCW) 방향이 여전히 2D 다각형의 속성이기 때문에 유효합니다.

2D 또는 3D를 들어

(투사가 적용된 변환 후) 당신은 당신이로 다각형을 추려 할 3D 솔루션의 2 차원 좌표에서 3 개 이상의 정점 (화면 공간)

v1.x = ?; // vert x and y 
    v1.y = ?; 
    // v2, v3 same for two more verts on the polygon. 
    // polygon is drawn from v1, to v2, to v3 

    // long hand to show working clearly 

    // get the vector from v2 to v1 
    vec1.x = v1.x - v2.x; 
    vec1.y = v1.y - v2.y; 

    // get the vector from v2 to v3 
    vec2.x = v3.x - v2.x; 
    vec2.y = v3.y - v2.y; 

    // get the cross product of the 2 vectors 
    cross = vec1.x * vec2.y - vec1.y * vec2.x; 

    if(cross < 0) { /* polygon is CCW and facing away */ } 
    else if(cross > 0) { /* polygon is CW and facing */ } 
    else { /* cross is 0 means polygon is edge on */ } 

을 가진 다각형이 렌더링이 수행해야하는 작업량을 가능한 한 빨리 줄일 수 있습니다. 대부분의 3D 파이프 라인에는 사전 계산 된 메쉬 지오메트리의 일부인 폴리곤의 법선 (폴리곤의면에 수직 인 벡터)이 포함됩니다.

다각형의 법선 법선은 먼저 월드 공간으로 변형되어야합니다. 그런 다음 폴리곤 월드 공간 법선과 벡터의 내적을 카메라에 사용하여 점 <이 0이면 폴리곤이 멀어지며 점> 0이면 카메라가되고 점 == 0 폴리곤은 가장자리가됩니다.

또는 세계 공간에서 뷰 방향을 정의하는 카메라에 대한 벡터를 조금 단순화하고 정의 할 수 있습니다. 당신이 경우에 가장자리를 무시하고 그들을 추려 수 있습니다 대부분의 경우

norm = {x,y,z}; // transformed world space polygon normal 
camNorm = {x,y,z}; //vector out from camera into world space 
// get the dot product of norm and camNorm 
dot = norm.x * camNorm.x + norm.y * camNorm.y + norm.z * camNorm.z 

// now if dot is negative (facing in the opposite direction of the camera direction) the polygon is facing the camera 
if(dot < 0) { /* polygon is CW and facing */ } 
else if(dot > 0) { /* polygon is CCW and facing away */ } 
else { /* dot is 0 means polygon is edge on */ } 

(점 또는 교차 == 0) 다각형이 아주 늦게 파이프 라인까지 정의 할 수 없습니다하지 않을 수 있습니다 어떤 경우

정상이라고. 이 경우 투영 변환을 적용하고 2D 솔루션을 사용할 수 있습니다 (첫 번째)