在3D matlab图形中设置初始摄像机位置后使用工具栏按钮时显示问题

时间:2014-08-25 12:46:56

标签: matlab camera rotation zoom

在matlab图中设置初始摄像机位置后,我有一些奇怪的显示问题。

我的意思是数据,相机位置和目标一开始都很好,但如果我第一次使用缩放按钮,那么使用 rotate3D 按钮,然后显示数据突然变得非常小(我需要再次缩放以获得正常行为并且无差别地以任何顺序使用缩放/旋转)。注意:如果我先旋转,然后缩放,我没有问题。

第一次缩放

zoom

然后旋转3D

数据领域突然变得非常小

rotate3D

我做错了什么或者只是一个错误?

以下是我的测试代码:

function [] = TestCamera()
%[
    % Define dummy data on a sphere
    azimuths = linspace(0, 359, 360) * pi/180;
    elevations = linspace(0,180, 181) * pi/180;
    [A,E]  = ndgrid(azimuths, elevations);
    X = cos(A) .* sin(E);
    Y = sin(A) .* sin(E);
    Z = cos(E);
    Data = peaks(cos(A), sin(E));

    % Create figure/axes + set initial camera position
    figure(1);
    clf;    
    axes('Visible', 'off', 'DataAspectRatio', [1 1 1], ...
         'CameraPosition', [1 1 1], 'CameraTarget', [0 0 0]);

    % Add graphics
    hold on;

    d = 1.7; t = d + 0.1;
    quiver3(0,0,0, d,0,0, 'LineWidth', 2, 'Color', 'r'); text(t, 0, 0, 'x', 'FontWeight', 'bold', 'Color', 'r');
    quiver3(0,0,0, 0,d,0, 'LineWidth', 2, 'Color', 'g'); text(0, t, 0, 'y', 'FontWeight', 'bold', 'Color', 'g');
    quiver3(0,0,0, 0,0,d, 'LineWidth', 2, 'Color', 'b'); text(0, 0, t, 'z', 'FontWeight', 'bold', 'Color', 'b');

    surf(X, Y, Z, Data); shading flat

    hold off;
%]

1 个答案:

答案 0 :(得分:0)

解决!相机离物体太近了。将相机放得更远可以解决问题:

axes(..., 'CameraPosition', [10 10 10], 'CameraTarget', [0 0 0], 'CameraViewAngle', 10, ...);
...
xlim([-1 1]); ylim([-1 1]); zlim([-1 1]);

以下是完整更正的示例代码:

function [] = TestCamera()
%[
    % Define dummy data on a sphere
    azimuths = linspace(0, 359, 360) * pi/180;
    elevations = linspace(0,180, 181) * pi/180;
    [A,E]  = ndgrid(azimuths, elevations);
    X = cos(A) .* sin(E);
    Y = sin(A) .* sin(E);
    Z = cos(E);
    Data = peaks(cos(A), sin(E));

    % Create figure/axes + set initial camera position
    figure(1);
    clf;    
    axes('Visible', 'off', 'DataAspectRatio', [1 1 1], ...
         'CameraPosition', [10 10 10], 'CameraTarget', [0 0 0], 'CameraViewAngle', 10);

    % Add graphics
    hold on;

    d = 1.7; t = d + 0.1;
    quiver3(0,0,0, d,0,0, 'LineWidth', 2, 'Color', 'r'); text(t, 0, 0, 'x', 'FontWeight', 'bold', 'Color', 'r');
    quiver3(0,0,0, 0,d,0, 'LineWidth', 2, 'Color', 'g'); text(0, t, 0, 'y', 'FontWeight', 'bold', 'Color', 'g');
    quiver3(0,0,0, 0,0,d, 'LineWidth', 2, 'Color', 'b'); text(0, 0, t, 'z', 'FontWeight', 'bold', 'Color', 'b');

    surf(X, Y, Z, Data); shading flat

    hold off;

    xlim([-1 1]);
    ylim([-1 1]);
    zlim([-1 1]);  
%]