2016-09-28 4 views
0

아래 그림과 같은 메시가 있습니다. 메쉬의 각 세그먼트는 양수 (np)이고 음수 일반 (nn)입니다. 법선의 각 쌍은 메쉬의 세그먼트에 속합니다. enter image description here법선 벡터의 가시성을 계산하십시오

중간의 빨간 점이 관측 지점입니다. 이 관측 지점에서 어떤 법선이 보이는지 알아야합니다.

내가 지금까지 따라 갔던 방법은 관측점에서 각 메쉬 세그먼트 중간까지 (ob_i) 법선 벡터를 계산하는 것입니다. 그런 다음 ob_inp 또는 nn에서 내적 제품을 수행합니다. 이 결과는 0보다 크거나 작습니다. 벡터보다 작 으면 벡터가 다른 방향을 향하게되고 관찰 지점에서 숨겨진 것으로 간주 할 수 있습니다. 내가있는 법선 벡터를 모두 얻기 위해 노력하고

vector<vector<int>> calculateShadowingMatrix(vector<point> observationNormals, vector<vector<point>> normals){ 
vector<vector<int>> shadowMatrix; 

for(unsigned ii = 0; ii < normals.size(); ii++){ 
    vector<int> visibilty; 

    for(unsigned jj = 0; jj < normals[ii].size(); jj++) { 

     double dot = dotProduct(observationNormals[ii], normals[ii][jj]); 

     if (dot <= 0.0) { 
      visibilty.push_back(1); 
     } else { 
      visibilty.push_back(0); 
     } 

    } 
    shadowMatrix.push_back(visibilty); 
} 

return shadowMatrix; 
} 

double dotProduct(point _u, point _v){ 
    return _u.getX()*_v.getX() - _u.getY()*_v.getY(); 
} 

을 : 나는 내적을 계산하고 가시성을 확인하는 방법을 Heres enter image description here

: 나는 다음과 같은 결과를 얻을이 방법

존재하는 관측점을 바라보고 바깥을 향하고있는 관측점을 제로로 만든다. 두 번째 이미지에서 볼 수 있듯이 오류가 발생합니다. 일부 벡터가 잘못된 방향을 향하고 있습니다. 로 보일 것입니다

최종 결과는 다음과 같습니다

enter image description here

+0

예상되는 결과는 무엇입니까? –

+0

모든 법선 벡터 화살표가 관측점을 향하게합니다. 첫 번째 그림에서는 오른쪽 구조에 빨간색 화살표가 있고 왼쪽 구조에는 파란색 화살표가 있어야합니다. –

+0

@MichaelRichardson 다른 사람들이 당신을 도울 수 있도록 질문을 업데이 트하십시오. –

답변

1

귀하의 내적 계산이 잘못된 것입니다. X * X + Y * Y이어야합니다.

+0

감사합니다! 그것은 완벽하게 작동합니다! –