跳至內容

MATLAB 程式設計/Psychtoolbox/OS X 常見問題解答

來自華夏公益教科書,開放書籍,共建世界
Back to MATLAB Programming/Psychtoolbox

本節包含一些關於 OSX 實現細節的問題。作為維基百科,鼓勵您將您的問題新增到這些問題中,並將您的見解新增到這些答案中...

常見問題解答

[編輯 | 編輯原始碼]

問:紋理、視窗和螢幕之間有什麼區別?

答:螢幕對應於物理連線的顯示裝置。螢幕 0 是帶有 Dock 和選單欄的顯示器。螢幕 1(在雙顯示器系統上)是第二個顯示器,依此類推... Screen('Screens') 命令返回所有可用螢幕的向量 - 可用、已連線且已開啟的顯示裝置。如果您有一個雙顯示器設定,其顯示器切換到映象模式(兩個顯示器顯示相同的內容),那麼在 PTB 中將顯示為單個螢幕。螢幕編號只是定義您要在哪個物理輸出裝置上開啟/顯示您的刺激視窗。

螢幕視窗用於顯示您的刺激。每個螢幕只能有一個全屏螢幕視窗 - 或根本沒有 PTB 視窗。所有繪圖命令都需要螢幕視窗的控制代碼,以便它們知道在哪裡繪製。

螢幕視窗是雙緩衝的:它們由一個後臺緩衝區和一個前臺緩衝區組成。後臺緩衝區是執行所有繪製操作的地方 - 您在此處構建/準備要呈現的刺激。前臺緩衝區由您的顯示器掃描輸出並顯示 - 您的投影儀、平板顯示器或 CRT 在顯示器重新整理間隔內。

在完成繪製並將您的刺激影像準備好在後臺緩衝區後,您將發出 Screen('Flip',...) 命令。此命令要求 PTB 在您的顯示裝置的下一個垂直回掃時切換前臺和後臺緩衝區的角色。這樣,以前的後臺緩衝區就變成了新的前臺緩衝區,並且您的新刺激將顯示給受試者。以前的前臺緩衝區成為新的後臺緩衝區,並準備好繪製下一個刺激。由於緩衝區交換與垂直回掃同步,並且始終在不到 1 微秒的時間內完成,因此您將獲得完美的、無閃爍、無撕裂的刺激呈現時間,無論繪製需要多長時間 - 除非您試圖在時間過短的時間內繪製過於複雜的東西。重要的是,Flip 將繪製(及其時間變化)和實際刺激呈現解耦 - 這在 MacOS-9 和 Win 工具箱中是不可能的。

離屏視窗與自 2006 年以來發布的 Psychtoolbox 中的紋理相同。在內部它們是相同的東西,因此您始終可以在需要使用離屏視窗的地方使用 Psychtoolbox 紋理,以及在需要使用紋理的地方使用離屏視窗。它們在建立和效能方面有所不同:紋理是由 Screen('MakeTexture') 從 Matlab 影像矩陣或由 Quicktime 電影播放引擎或影片捕獲引擎自動建立的。建立它們非常快且高效。它們還針對儘可能快的繪製進行了最佳化。離屏視窗透過呼叫 Screen('OpenOffscreenWindow') 建立; - 它們使用可選的大小、顏色深度和初始均勻顏色進行初始化,而不是使用影像內容。它們針對快速繪製*到*它們中進行了最佳化 - 每個 Screen 繪圖命令不僅可以繪製到螢幕視窗,還可以繪製到離屏視窗。建立後,它們(幾乎)是同義詞。

例如。

假設您在 Matlab 中有一個影像矩陣 I,例如,透過 I=imread('myimage.png') 建立

那麼

tex=Screen('MakeTexture', win, I);

tex=Screen('OpenOffscreenWindow', win); Screen('PutImage', tex, I);

相同,只是前者比後者快得多。優點還在於,Screen('DrawTexture') 命令允許在繪製時縮放、放大、過濾和旋轉紋理,紋理繪製非常快,因為它使用了圖形卡上的專用硬體,以及更多...

問:如何建立離屏視窗的副本?

答:您首先要建立一個與原始離屏視窗大小和顏色深度相同的空離屏視窗,然後將原始視窗的內容複製到新視窗中

讓 origWin 是您想要複製的離屏視窗,然後

duplicateWin = Screen('OpenOffscreenWindow', origWin); Screen('CopyWindow', origWin, duplicateWin);

-> duplicateWin 是 origWin 的副本。

問:有沒有簡單的方法可以為所有視窗/螢幕設定 TextSize(或其他類似引數)?

答:沒有。您必須透過 Screen('TextSize', win, ...) 命令為每個視窗設定它。但考慮到大多數人最多隻有兩個視窗,這並不算太多工作。

問:'OpenOffScreenWindow' 視窗可以有多個緩衝區嗎?

答:不。擁有多個緩衝區沒有意義。

華夏公益教科書