アンチエイリアス(三角形の描画)

事前に次のことを理解しておいてください。

以下が三角形を描画するサンプルプログラムです。

パターン1から4のいずれかのみを有効にして実行してください。

function triangle1
try
  AssertOpenGL
  ListenChar(2);
  %myKeyCheck;
 
  screenNumber = max(Screen('Screens'));
  [win, rect] = Screen('OpenWindow', screenNumber, 0, [10 50 750 550]);
 
  %三角形の頂点の座標
  apex = [0, 100, 100, 300, 300, 0;
            0, 200, 200, 50,  50,  0];
     
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %パターン1
  % シンプルに三角形を描く
  Screen('DrawLines', win, apex, [], [255, 255, 255]);
  % 線分の太さを変える
  %Screen('DrawLines', win, apex, [6, 4, 2], [255, 255, 255]);
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %パターン2
  % 頂点の座標を、画面中央が(0, 0)になるようにシフトさせる。
  %[center(1), center(2)] = RectCenter(rect);
  %Screen('DrawLines', win, apex, [], [255, 255, 255], center);
 
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %パターン3
  % 3本の線分の色を変える
  %   1本目:白から赤、2本目:白から緑、3本目:白から青)
  %colvect = [255, 255, 255, 0,   255, 0;
  %           255, 0,   255, 255, 255, 0;
  %           255, 0,   255, 0,   255, 255];
  %Screen('DrawLines', win, apex, 2, colvect);
 
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %パターン4
  % 三角形の辺を滑らかに描画する
  % 線分の太さが1のだと点線のように描画されてしまうことがある。
  %[center(1), center(2)] = RectCenter(rect);
  %Screen('BlendFunction', win, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  %Screen('DrawLines', win, apex, 2, [255, 255, 255], center, 1);
 
  Screen('Flip', win);
 
  KbWait;
 
  sca;
  ListenChar(0);
catch
  sca;
  ListenChar(0);
end

注意点

  • 線分幅がデフォルトの1のままでアンチエイリアシングを有効にすると、点線のように描画されることがあるようです。線分幅は2以上の値のほうがよいようです。
  • Screen('DrawLine')という関数がありますが(LinesではなくLineであることに注意)アンチエイリアシングを有効にできません。アンチエイリアシングが必要であれば1本の線分でもScreen('DrawLines')を使ったほうがよいでしょう。