Main Content

로우 레벨 카메라 속성

설정 가능한 카메라 속성

카메라 그래픽스는 카메라의 위치와 방향을 제어하는 axes 속성 그룹을 기반으로 합니다. 일반적으로, campos, camtarget, camup과 같은 카메라 명령을 사용하면 이러한 속성에 직접 액세스할 필요가 없습니다.

속성

설명

CameraPosition

시점의 위치를 좌표축 단위로 지정합니다.

CameraPositionMode

automatic 모드에서는 장면에 따라 위치가 결정됩니다. manual 모드에서는 사용자가 시점 위치를 지정합니다.

CameraTarget

좌표축에서 카메라가 가리키는 위치를 지정합니다. 이 속성은 CameraPosition과 함께 시점 축을 정의합니다.

CameraTargetMode

automatic 모드에서는 MATLAB®CameraTarget을 좌표축 플롯 상자의 중심으로 지정합니다. manual 모드에서는 사용자가 위치를 지정합니다.

CameraUpVector

시점 축을 기준으로 하는 카메라 회전은 위쪽으로 잡은 방향을 나타내는 벡터로 정의됩니다.

CameraUpVectorMode

automatic 모드에서는 MATLAB이 2차원 보기의 경우 상향 벡터를 양의 y축을 따라 지정하고, 3차원 보기의 경우 상향 벡터를 양의 z축을 따라 지정합니다. manual 모드에서는 사용자가 방향을 지정합니다.

CameraViewAngle

"렌즈"의 시야를 지정합니다. CameraViewAngle의 값을 지정하면 MATLAB은 Figure 창에 맞춰 좌표축을 늘이지 않습니다.

CameraViewAngleMode

automatic 모드에서는 MATLAB이 시야각을 전체 장면을 포착하는 최소 각도로 조정합니다. manual 모드에서는 사용자가 각도를 지정합니다.

CameraViewAngleModemanual로 설정하면 늘여서 채우기 동작이 무시됩니다.

Projection

직교 투영 또는 원근 투영을 선택합니다.

디폴트 시점 선택

모든 카메라 모드 속성이 auto(디폴트 값)로 설정되어 있는 경우, MATLAB은 보기를 자동으로 제어하여 사용자가 장면에서 위치 사각형(좌표축의 Position 속성의 너비와 높이 성분으로 정의됨)을 채우기를 바란다는 가정에 기반하여 적합한 값을 선택합니다.

기본적으로 MATLAB은 다음 동작을 수행합니다.

  • 장면의 방향이 표준 MATLAB 2차원 보기 또는 3차원 보기가 되도록 CameraPosition을 설정합니다(view 명령 참조).

  • CameraTarget을 플롯 상자의 중심으로 설정합니다.

  • y 방향이 2차원 보기의 위쪽이 되고 z 방향이 3차원 보기의 위쪽이 되도록 CameraUpVector를 설정합니다.

  • 장면이 위치 사각형(좌표축의 Position 속성으로 정의된 사각형)을 채우도록 만드는 최소 각도로 CameraViewAngle을 설정합니다.

  • 직교 투영을 사용합니다.

일반적으로 이 디폴트 동작은 바람직한 결과를 생성합니다. 하지만 유용한 효과를 창출하기 위해 이러한 속성을 변경하는 것도 가능합니다.

장면 안팎으로 움직이기

좌표축으로 정의된 3차원 공간의 어디로든 카메라를 움직일 수 있습니다. 카메라는 대상의 위치와는 무관하게 계속 대상 쪽을 가리킵니다. 카메라가 움직이면 MATLAB은 장면이 위치 사각형을 채우도록 카메라 시야각을 변경합니다.

장면을 관통하여 이동하기

카메라를 장면 속을 관통하도록 움직여 비행 시점 효과를 창출할 수 있습니다. 이를 위해서는 계속 CameraPosition 속성을 바꾸면서 대상 쪽으로 이동해야 합니다. 카메라가 공간을 통과하며 움직이게 되므로, 카메라 대상을 지나치면 카메라가 가리키는 방향도 움직이게 됩니다. CameraViewAngleModemanual로 설정하면 카메라를 이동할 때마다 MATLAB의 장면의 크기를 자동으로 조정하는 기능을 무시할 수 있습니다.

CameraPositionCameraTarget을 업데이트할 경우 계속 이동 방향으로 향하면서 장면을 통과하는 효과를 얻을 수 있습니다.

Projectionperspective로 설정되면 카메라가 대상에 가까워질수록 원근 왜곡 정도가 증가하고 멀어질수록 감소합니다.

예제 — 대상이 있는 방향, 또는 반대 방향으로 이동하기

시점 축을 따라 카메라를 움직이려면 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');

CameraViewAngleModemanual로 설정하면 종횡비가 갑자기 변할 수 있습니다.

장면을 더 크거나 작게 만들기

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

크기 조정 없이 회전

CameraViewAngleModeauto인 경우 MATLAB은 장면이 좌표축 위치 사각형에 맞춰지도록 CameraViewAngle을 계산합니다. 따라서 장면이 회전하는 동안 크기는 명백히 바뀌게 됩니다. 회전 중에 크기가 조정되지 않도록 하려면 CameraViewAngleModemanual로 설정해야 하는데, 만약 사용자가 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)

이 방향으로 구를 그리면 다음과 같이 됩니다.