Перемещение объектов, например попеременно, требует преобразования данных, который задает объекты. Можно улучшить производительность путем использования в своих интересах того, что аппаратное обеспечение машинной графики может применить преобразования к данным. Можно затем постараться не отправлять преобразованные данные в средство отображения. Вместо этого вы отправляете только четыре четырьмя матрица преобразования.
Чтобы осознать выигрыши в производительности этого подхода, используйте функцию 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 | Используя % 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 |