2016-08-14 2 views

답변

1

즉, 메시는 크기가 1 인 축 정렬 큐브에 의해 정의 된 공간에 맞춰지며, 예를 들어 모서리 : A(-0.5,-0.5,-0.5)B(+0.5,+0.5,+0.5)으로 정의됩니다.

이를 달성하기

  1. 모든 사용 꼭지점을 통해 실제 경계 상자를

    그래서 루프를 얻고 최소 및 최대 각 축 A0(xmin,ymin,zmin),B0(xmax,ymax,zmax) 좌표를 기억합니다.

  2. 정규화 바운딩 박스 A,B

    (선형 보간에 의해) 그래서 다시 각 정점을 반복하고 재 계산한다. 예를 들면 다음과 같습니다 :

    Vertex[i].x=A.x + (B.x-A.x)*(Vertex[i].x-A0.x)/(B0.x-A0.x) 
    Vertex[i].y=A.y + (B.y-A.y)*(Vertex[i].y-A0.y)/(B0.y-A0.y) 
    Vertex[i].z=A.z + (B.z-A.z)*(Vertex[i].z-A0.z)/(B0.z-A0.z) 
    

    문제는 가로 세로 비를 고려하지 않는다는 것입니다. 내가 바로 SO/SE 편집기에서 파생 내가 어떤 실수를하지 않았다

    scale = min((B.x-A.x)/(B0.x-A0.x)), 
          (B.y-A.y)/(B0.y-A0.y), 
          (B.z-A.z)/(B0.z-A0.z)) 
    Vertex[i].x=(Vertex[i].x-0.5*(A0.x+B0.x))*scale+0.5*(A.x+B.x) 
    Vertex[i].y=(Vertex[i].y-0.5*(A0.y+B0.y))*scale+0.5*(A.y+B.y) 
    Vertex[i].z=(Vertex[i].z-0.5*(A0.z+B0.z))*scale+0.5*(A.z+B.z) 
    

    희망 : 경우에 당신은 메시가 보존해야 할 당신은이를 변경해야합니다. 새로운 경계 상자 크기를 초과하지 않는 최대(최대 메시 축 크기가 새 경계 상자에 정확히 맞음)을 계산 한 다음 이전 테두리 상자의 가운데가 새 경계 상자의 중심이되도록하면서 메시를 다시 크기 조정하는 것이 아이디어입니다.

    일부 메쉬에는 자체 변환 행렬도 포함됩니다. 이 경우이 변환을이 행렬에 직접 인코딩하여 정점을 그대로 둘 수 있습니다. 그러나 일반적으로 메쉬 정규화가 필요한 경우 일부 Vertexes 조작에 필요하기 때문에 일반적으로 꼭지점을 변경하는 것이 좋습니다. 일반적으로 정점을 변경하는 것이 더 좋습니다 ...

관련 문제