在matlab图中设置初始摄像机位置后,我有一些奇怪的显示问题。
我的意思是数据,相机位置和目标一开始都很好,但如果我第一次使用缩放按钮,那么使用 rotate3D 按钮,然后显示数据突然变得非常小(我需要再次缩放以获得正常行为并且无差别地以任何顺序使用缩放/旋转)。注意:如果我先旋转,然后缩放,我没有问题。
第一次缩放
然后旋转3D
数据领域突然变得非常小
我做错了什么或者只是一个错误?
以下是我的测试代码:
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;
%]
答案 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]);
%]