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