![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/178149/image.png)
I used plot3. when I try to rotate the 3D image, it is too slow to rotate for each time.
7 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
hFig = figure('name','3D Plotting_Solve_Pyramid','numbertitle','off'); hold on;
set(gcf,'Renderer','OpenGL'); % might improve performance
hAxes = gca;
for row = 1:hightl
for col = 1:4:widthl
objcolor = double(I2(row,col,:))./255.0;
if objectpoint(row,col,3) >= -2.0 %&& (sum(objcolor)>0.3)
plot3(hAxes, objectpoint(row,col,1), objectpoint(row,col,2), objectpoint(row,col,3), '.', 'MarkerEdgeColor',objcolor);
end
end
end
%Set up the view.
xlabel(' X axis');
ylabel(' Y axis');
zlabel(' Z axis');
grid on;
cameratoolbar show;
axis vis3d;
axis equal;
0 Commenti
Risposte (1)
Mike Garrity
il 20 Ago 2015
Modificato: Mike Garrity
il 20 Ago 2015
I'm guessing that widthl and hightl are fairly large. This means that you're creating a large number of objects which are each drawing a single point. That's not a very efficient way to do it. You'll be much better off batching them up into a single object. A modern GPU is optimized for drawing large batches of geometry, not for drawing large numbers of tiny batches.
It looks like it'd actually be quite simple in this case. It's probably something like:
x = objectpoint(:,:,1);
y = objectpoint(:,:,2);
z = objectpoint(:,:,3);
r = double(x) / 255;
g = double(y) / 255;
b = double(z) / 255;
mask = (z(:)>=-2) & (r(:)+g(:)+b(:) > .3);
scatter3(hAxes,x(mask),y(mask),z(mask),[],[r(mask), g(mask), b(mask)],'.')
On my system, with a Quadro K600 on R2015a, that runs at over 10 million markers per second. You could probably do better with a bit of tweaking, but that's about 120 frames per second for this image:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/178149/image.png)
5 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!