아래 그림과 같은 메시가 있습니다. 메쉬의 각 세그먼트는 양수 (np)이고 음수 일반 (nn)입니다. 법선의 각 쌍은 메쉬의 세그먼트에 속합니다. 법선 벡터의 가시성을 계산하십시오
중간의 빨간 점이 관측 지점입니다. 이 관측 지점에서 어떤 법선이 보이는지 알아야합니다.
내가 지금까지 따라 갔던 방법은 관측점에서 각 메쉬 세그먼트 중간까지 (ob_i) 법선 벡터를 계산하는 것입니다. 그런 다음 ob_i 및 np 또는 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
: 나는 다음과 같은 결과를 얻을이 방법
존재하는 관측점을 바라보고 바깥을 향하고있는 관측점을 제로로 만든다. 두 번째 이미지에서 볼 수 있듯이 오류가 발생합니다. 일부 벡터가 잘못된 방향을 향하고 있습니다. 로 보일 것입니다
최종 결과는 다음과 같습니다
예상되는 결과는 무엇입니까? –
모든 법선 벡터 화살표가 관측점을 향하게합니다. 첫 번째 그림에서는 오른쪽 구조에 빨간색 화살표가 있고 왼쪽 구조에는 파란색 화살표가 있어야합니다. –
@MichaelRichardson 다른 사람들이 당신을 도울 수 있도록 질문을 업데이 트하십시오. –