Преобразование объектов эффективно

Перемещение объектов, например, попеременно, требует преобразования данных, которые задают объекты. Можно улучшать производительность путем использования в своих интересах того, что аппаратное обеспечение машинной графики может применять преобразования к данным. Можно затем постараться не отправлять преобразованные данные в средство отображения. Вместо этого вы отправляете только, четыре четырьмя преобразовывают матрицу.

Чтобы осознать выигрыши в производительности этого подхода, используйте функцию hgtransform, чтобы сгруппировать объекты, которые вы хотите переместить.

Следующие примеры задают сферу и вращают ее с помощью двух методов, чтобы сравнить производительность:

  • Функция rotate преобразовывает данные сферы и отправляет данные в поток средства отображения с каждым вызовом drawnow.

  • Функция hgtransform отправляет матрицу преобразования за тем же вращением к потоку средства отображения.

Код с низкой производительностьюКод с лучшей производительностью

Когда данные объектов являются большими, узкое место обновления становится ограничивающим фактором.

% Using rotate
figure
[x,y,z] = sphere(270);

s = surf(x,y,z,z,'EdgeColor','none');
axis vis3d
for ang = 1:360
   rotate(s,[1,1,1],1)
   drawnow
end

Используя hgtransform применяет преобразование на стороне средства отображения узкого места.

% Using hgtransform
figure
ax = axes;
[x,y,z] = sphere(270);

% Transform object contains the surface
grp = hgtransform('Parent',ax);
s = surf(ax,x,y,z,z,'Parent',grp,...
   'EdgeColor','none');

view(3)
grid on
axis vis3d

% Apply the transform
tic
for ang = linspace(0,2*pi,360)
   tm = makehgtform('axisrotate',[1,1,1],ang);
   grp.Matrix = tm;
   drawnow
end
toc