我正在MATLAB中運行一個模擬,其中我有一個可以更改每個時間步的大型3D數據集。我正在嘗試使用3D散點圖顯示數據,其中點隨着模擬的進行採用不同的位置,大小,顏色和透明度級別。尺寸和顏色信息是多餘的。使用散點圖可視化大型3D數據集
在MATLAB中渲染和旋轉圖形是緩慢而不連貫的。我的電腦有4 GHz i7-4790 CPU和NVIDIA GeForce GTX 750 Ti圖形卡。我在Windows 7上使用Matlab R2016a。我檢查了我的MATLAB OpenGL設置,並且硬件支持級別已滿。 (硬件OpenGL對於透明度是必要的。)此外,我使用GPU-Z來監視GPU使用情況,在繪圖和旋轉過程中,GPU負載僅在25-30%時達到峯值。
這裏是我的代碼示例:
load sample_data2
channels_matrix = cat(1, channels{:});
num_channels = length(channels);
channel_lengths = cellfun(@(x) size(x, 1), channels);
figure(1);
for i = 1:num_channels
g = plot3(channels{i}(:, 1), channels{i}(:, 2), channels{i}(:, 3), 'k');
set(g, 'LineWidth', 1.5)
hold on;
text(channels{i}(1, 1), channels{i}(1, 2), channels{i}(1, 3), num2str(i))
end
caxis([0 1])
colorbar
drawnow
numDivisions = 8;
ptsPerDivision = numel(grid_x)/numDivisions;
T = 1000;
numplotpts = 2E4;
for t = 1:T
plot_signal = nan(size(grid_x));
plot_signal(sort(randsample(numel(grid_x), numplotpts))) =...
sort(rand(numplotpts, 1));
tic
for i = 1:numDivisions
temp = plot_signal(dists_idx((i-1)*ptsPerDivision+1:i*ptsPerDivision));
yplot = grid_y(dists_idx((i-1)*ptsPerDivision+1:i*ptsPerDivision));
xplot = grid_x(dists_idx((i-1)*ptsPerDivision+1:i*ptsPerDivision));
zplot = grid_z(dists_idx((i-1)*ptsPerDivision+1:i*ptsPerDivision));
if t == 1
h(i) = scatter3(yplot(~isnan(temp)), xplot(~isnan(temp)),...
zplot(~isnan(temp)), 50*temp(~isnan(temp)), temp(~isnan(temp)), ...
'filled', 'MarkerFaceAlpha', exp(-i)^0.25);
else
h(i).XData = yplot(~isnan(temp));
h(i).YData = xplot(~isnan(temp));
h(i).ZData = zplot(~isnan(temp));
h(i).SizeData = 50*temp(~isnan(temp));
h(i).CData = temp(~isnan(temp));
end
end
drawnow
toc
end
,這裏是到data的鏈接。有什麼方法可以加速渲染並使輪換更流暢嗎?我注意到,將所有數據點的大小固定爲單個標量可大大加快渲染和旋轉速度。是否有可能保持代碼中的大小,並且仍然能夠快速渲染和旋轉圖形?
編輯:A 我發佈了。
它是否需要在實時或你可以渲染它作爲一個電影(.avi)以後更流暢的播放? – informaton
實時並不是一項要求,但它是首選。 –
我在代碼中調用了大約0.5秒的延遲(例如tic/toc)。你現在在做什麼? – informaton