이것은 비디오 게임 프로그래밍에서 무엇이라고 불 립니 까? 몇몇 공식은 그것을 설명한다. 그 공식 중 일부는 무엇입니까?다각형이 카메라를 마주보고 있는지 또는 정면을 향하고 있는지 어떻게 판단 할 수 있습니까?
답변
다각형이 시계 반대 방향 (즉, 정점이 ccw으로 나열된 경우) 인 경우 폴리곤의 법선 벡터를 계산하고 이것이 카메라를 향하고 있는지 확인합니다.
볼록 각을 형성하는 다각형의 세 개의 연속 된 정점 a, b, c를 찾고 법선 벡터 (b-a) x (c-b)를 계산하십시오.
좋아요. 정상적인 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 솔루션을 사용할 수 있습니다 (첫 번째)