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