解説3
ここでは、凝視点を描画するテクニックについて説明します。
FixCr=ones(20,20)*255;
FixCr(10:11,:)=0;
FixCr(:,10:11)=0; %try imagesc(FixCr) to display the result in Matlab
fixcross = Screen('MakeTexture',expWin,FixCr);
この部分は凝視点の十字マークの描画部分になります。行列の考え方に慣れるまでは分かりにくい部分ですので、表を用いながら説明したいと思います。(ただし、表がFireFox 3.5.2では全部見えるのですが、Internet Explorer 8.0 では全部見えない場合があります。表をクリックすると拡大して見れます。)
では説明に入ります。
FixCr=ones(20,20)*255;
でできる行列FixCrは次の表のようになります。(青い部分は行番号、黄色い部分は列番号で、FixCrには含まれません)
次に
FixCr(10:11,:)=0;
をしています。FixCrの10行目と11行目に0を代入するという意味です。その結果FixCrは次のようになります。
10行目と11行目のすべての列が0になっていますね。
ここで255と0の意味についてご説明しますと、255が白を0が黒を表すというお約束があるのです。つまり、今のFixCrは白い正方形(20×20)の真ん中に水平の黒い線分が描かれているような状況なのです。
さて、プログラムの次の行は
FixCr(:,10:11)=0;
となっています。今度は10列目と11列目に0を代入します。
その結果のFixCrは次のようになります。
分かりやすいように、0を黒で表示してみました。
もうお分かりかと思いますが、これは凝視点の形(十字マーク)になっているわけです。
fixcross = Screen('MakeTexture',expWin,FixCr);
でFixCrの行列の内容を、Screen('DrawTexture') で使えるような情報(fixcross)に変換しています。
Screen('MakeTexture')をご参照ください。
※上記の説明はテクスチャを使った凝視点の描画になりますが、コメント部分に描いてあるようにオフスクリーンを使って凝視点を描くこともできます。ただし、Screen('MakeTexture?')を見てみると、オフスクリーンよりもテクスチャを使ったほうが描画が速いようです。
解説3はここまで。