exponenta event banner

Эффективное преобразование объектов

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

Чтобы реализовать преимущества этого подхода для производительности, используйте 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