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