在我的实验中,我展示了许多不同的光栅。为了节省实验执行期间的时间,我预先绘制相应的纹理并将它们保存在缓冲区中。但是,这需要大约10-20秒,具体取决于运行使用的刺激次数以及机器的速度。
我想知道是否有办法将预先绘制的纹理存储在硬盘上并让它们读入?
以下是当前代码:
tic
stimulus_matrix = [];
for ifrequencies = 1:length(frequencies)
for iphase = 1:length(phases)
for icontrast_manipulation = 1:length(contrast_manipulation)
for icontrast_values = 1:length(contrast_values(1,:))
grating = makeStimulus(contrast_values(icontrast_manipulation,icontrast_values),grating_size_degrees,phases(iphase),frequencies(ifrequencies,1));
stimulus_matrix(ifrequencies,iphase,icontrast_manipulation,icontrast_values) = Screen('MakeTexture', my_window, grating);
Screen('FillOval', stimulus_matrix(ifrequencies,iphase,icontrast_manipulation,icontrast_values), background, CenterRect(ovalRect,gratingRect));
% Display a progress bar during buffering
% code for progress bar removed for clarity
end
end
end
end
答案 0 :(得分:1)
你可以使用
save('mydata.mat',stimulus_matrix);
当你需要矩阵时,你可以加载它。
load mydata.mat;
然后根据需要使用刺激_矩阵。
答案 1 :(得分:0)
stimulus_matrix
不仅仅是生成纹理的索引吗?这些指数只是指针。因此,如果您关闭纹理但保持窗口打开,我不认为加载矩阵可以让您再次绘制纹理。
答案 2 :(得分:0)
不确定这是否适合您的情况,但您可以尝试:
screen_array = Screen('GetImage', my_window);
绘制纹理时。这将为您提供当时屏幕内容的3D数组(包括纹理),然后您可以编辑它以仅包含纹理和/或随后导出。