로우 레벨 카메라 속성
설정 가능한 카메라 속성
카메라 그래픽스는 카메라의 위치와 방향을 제어하는 axes 속성 그룹을 기반으로 합니다. 일반적으로, campos
, camtarget
, camup
과 같은 카메라 명령을 사용하면 이러한 속성에 직접 액세스할 필요가 없습니다.
속성 | 설명 |
---|---|
CameraPosition | 시점의 위치를 좌표축 단위로 지정합니다. |
CameraPositionMode |
|
CameraTarget | 좌표축에서 카메라가 가리키는 위치를 지정합니다. 이 속성은 |
CameraTargetMode |
|
CameraUpVector | 시점 축을 기준으로 하는 카메라 회전은 위쪽으로 잡은 방향을 나타내는 벡터로 정의됩니다. |
CameraUpVectorMode |
|
CameraViewAngle | "렌즈"의 시야를 지정합니다. CameraViewAngle의 값을 지정하면 MATLAB은 Figure 창에 맞춰 좌표축을 늘이지 않습니다. |
CameraViewAngleMode |
|
Projection | 직교 투영 또는 원근 투영을 선택합니다. |
디폴트 시점 선택
모든 카메라 모드 속성이 auto
(디폴트 값)로 설정되어 있는 경우, MATLAB은 보기를 자동으로 제어하여 사용자가 장면에서 위치 사각형(좌표축의 Position
속성의 너비와 높이 성분으로 정의됨)을 채우기를 바란다는 가정에 기반하여 적합한 값을 선택합니다.
기본적으로 MATLAB은 다음 동작을 수행합니다.
장면의 방향이 표준 MATLAB 2차원 보기 또는 3차원 보기가 되도록
CameraPosition
을 설정합니다(view
명령 참조).CameraTarget
을 플롯 상자의 중심으로 설정합니다.y 방향이 2차원 보기의 위쪽이 되고 z 방향이 3차원 보기의 위쪽이 되도록
CameraUpVector
를 설정합니다.장면이 위치 사각형(좌표축의
Position
속성으로 정의된 사각형)을 채우도록 만드는 최소 각도로CameraViewAngle
을 설정합니다.직교 투영을 사용합니다.
일반적으로 이 디폴트 동작은 바람직한 결과를 생성합니다. 하지만 유용한 효과를 창출하기 위해 이러한 속성을 변경하는 것도 가능합니다.
장면 안팎으로 움직이기
좌표축으로 정의된 3차원 공간의 어디로든 카메라를 움직일 수 있습니다. 카메라는 대상의 위치와는 무관하게 계속 대상 쪽을 가리킵니다. 카메라가 움직이면 MATLAB은 장면이 위치 사각형을 채우도록 카메라 시야각을 변경합니다.
장면을 관통하여 이동하기
카메라를 장면 속을 관통하도록 움직여 비행 시점 효과를 창출할 수 있습니다. 이를 위해서는 계속 CameraPosition
속성을 바꾸면서 대상 쪽으로 이동해야 합니다. 카메라가 공간을 통과하며 움직이게 되므로, 카메라 대상을 지나치면 카메라가 가리키는 방향도 움직이게 됩니다. CameraViewAngleMode
를 manual
로 설정하면 카메라를 이동할 때마다 MATLAB의 장면의 크기를 자동으로 조정하는 기능을 무시할 수 있습니다.
CameraPosition
과 CameraTarget
을 업데이트할 경우 계속 이동 방향으로 향하면서 장면을 통과하는 효과를 얻을 수 있습니다.
Projection
이 perspective
로 설정되면 카메라가 대상에 가까워질수록 원근 왜곡 정도가 증가하고 멀어질수록 감소합니다.
예제 — 대상이 있는 방향, 또는 반대 방향으로 이동하기
시점 축을 따라 카메라를 움직이려면 CameraPosition
속성에 대한 새 좌표를 계산해야 합니다. 새 좌표는 카메라 위치와 카메라 대상 사이의 총 거리 중 일부를 (대상 방향으로 이동하도록 )빼거나, (대상의 반대 방향으로 이동하도록)더하여 계산할 수 있습니다.
함수 movecamera
는 인수 dist
가 양수이면 장면 속 방향으로 들어가고 dist
가 음수이면 장면 밖 방향으로 나오는 새로운 CameraPosition
을 계산합니다.
function movecamera(dist) %dist in the range [-1 1] set(gca,'CameraViewAngleMode','manual') newcp = cpos - dist * (cpos - ctarg); set(gca,'CameraPosition',newcp) function out = cpos out = get(gca,'CameraPosition'); function out = ctarg out = get(gca,'CameraTarget');
CameraViewAngleMode
를 manual
로 설정하면 종횡비가 갑자기 변할 수 있습니다.
장면을 더 크거나 작게 만들기
CameraViewAngle
속성을 조정하면 장면에 대한 보기가 더 커지거나 작아집니다. 각도가 커질수록 보기에 더 큰 영역을 담을 수 있으므로 장면 내 객체는 더 작게 보입니다. 마찬가지로, 각도가 작아질수록 객체는 더 크게 보입니다.
CameraViewAngle
을 변경하면 카메라의 위치에 영향을 주지 않고 장면이 더 커지거나 작아집니다. 이는 지나치고 나면 더 이상 장면에 나타나지 않을(이는 카메라 위치를 변경한 경우에 발생할 수 있음) 객체를 지나쳐 시점을 이동하지 않은 채로 확대하려는 경우에 적합한 기능입니다. 또한, Figure의 Projection
속성이 perspective
로 설정된 경우에는 CameraPosition
을 변경하면 장면에 적용되는 원근의 정도에 영향을 미치지만 CameraViewAngle
은 변경해도 이에 영향을 미치지 않습니다.
장면을 중심으로 회전하기
view
명령을 사용하여 z축을 기준으로 방위각을 바꿔가면서 시점을 회전하고, 방위각을 기준으로 고도를 바꿔가면서 시점을 회전할 수 있습니다. 이것은 반지름이 시점 축의 길이인 구의 곡면을 따라 카메라가 장면 주변을 돌게 하는 효과가 있습니다. CameraPosition
을 변경하여 같은 효과를 낼 수도 있지만, 그러려면 view
를 호출할 때 MATLAB이 자동으로 수행하는 계산을 사용자가 직접 수행해야 합니다.
예를 들어, 함수 orbit
은 카메라가 장면 주변을 돌게 합니다.
function orbit(deg) [az, el] = view; rotvec = 0:deg/10:deg; for i = 1:length(rotvec) view([az+rotvec(i) el]) drawnow end
크기 조정 없이 회전
CameraViewAngleMode
가 auto
인 경우 MATLAB은 장면이 좌표축 위치 사각형에 맞춰지도록 CameraViewAngle
을 계산합니다. 따라서 장면이 회전하는 동안 크기는 명백히 바뀌게 됩니다. 회전 중에 크기가 조정되지 않도록 하려면 CameraViewAngleMode
를 manual
로 설정해야 하는데, 만약 사용자가 CameraViewAngle
속성의 값을 지정했다면 이는 저절로 설정됩니다. orbit
함수에서 이 작업을 수행하려면 다음 명령문을 추가하십시오.
set(gca,'CameraViewAngleMode','manual')
시점 축을 기준으로 회전
위쪽으로 정의된 방향을 지정하여 장면의 방향을 변경할 수 있습니다. 기본적으로, MATLAB은 2차원 보기에서는 y축(CameraUpVector
가 [0 1 0]
임), 3차원 보기에서는 z축(CameraUpVector
가 [0 0 1]
임)을 위쪽으로 정의합니다. 하지만 임의의 방향을 위쪽으로 지정할 수 있습니다.
CameraUpVector
속성으로 정의되는 벡터는 카메라 좌표계의 한 축을 형성합니다. 내부적으로 MATLAB은 지정된 벡터를 카메라 방향(즉, 시점 축)에 수직인 평면으로 투영하여 카메라 상향 벡터의 실제 방향을 결정합니다. 이로 인해 CameraUpVector
는 이 평면에 놓여 있을 필요가 없으므로 이에 대한 속성 지정이 간소화됩니다.
많은 경우, 좌표축 x축, y축, z축을 기준으로 하는 각도로 원하는 상향 벡터를 시각화하는 것이 편리할 수 있습니다. 그러면 방향 코사인을 사용하여 각도를 벡터 성분으로 변환할 수 있습니다. 단위 벡터의 경우 다음과 같이 단순하게 표현할 수 있습니다.
여기서 각도 α, β, γ는 도 단위로 지정됩니다.
XComponent = cos(α*(pi/180));
YComponent = cos(β*(pi/180));
ZComponent = cos(γ*(pi/180));
방향 코사인에 대한 자세한 설명은 벡터 해석에 관한 수학 서적을 참조하십시오.
카메라의 상향 벡터 계산하기
z축에 대해 30°의 각도를 이루고 y-z 평면에 놓여 있는 상향 벡터를 지정하려면 다음 표현식을 사용하십시오.
upvec = [cos(90*(pi/180)),cos(60*(pi/180)),cos(30*(pi/180))];
그런 다음 CameraUpVector
속성을 설정하십시오.
set(gca,'CameraUpVector',upvec)
이 방향으로 구를 그리면 다음과 같이 됩니다.