Psychtoolbox 将绘制的正方形更改为 diamond/rhombus

Psychtoolbox change drawn square to diamond/rhombus

我是 psychtoolbox 的新手,正在尝试 rotate/draw 我的框架正方形 diamond/rhombus,但不太明白它是如何工作的。这是我的代码:

AssertOpenGL;
screenNo  = max(Screen('Screens')); 
screenRes = [0 0 640 480];          
Screen('Preference', 'SkipSyncTests', 2); 

ListenChar(2);

[win, rect] = Screen('OpenWindow', screenNo, [0 0 0], screenRes);
[width, height]=Screen('WindowSize', win); 
[x,y] = RectCenter(rect); 
baseRect = [0 0 250 250]; 
centeredRect = CenterRectOnPointd(baseRect, x, y); 

Screen('FrameRect', win, [255 255 255], centeredRect, 3);
Screen('Flip', win);

KbWait;
sca; 

我尝试将 baseRect 更改为 [320 115 320 365],但它不起作用。如果我想要 diamond/rhombus.

,不太确定如何指定 [left, top, right, bottom] 坐标

感谢您的帮助。

FrameRect 函数只会构造直立的矩形。您可以从矩形创建纹理,然后在显示时旋转它。或者,您可以指定菱形每条边的坐标,然后使用 'FramePoly' 函数显示该坐标。例如:

AssertOpenGL;
screenNo  = max(Screen('Screens')); 
screenRes = [0 0 640 480];          
Screen('Preference', 'SkipSyncTests', 2); 

ListenChar(2);

[win, rect] = Screen('OpenWindow', screenNo, [0 0 0], screenRes);
[width, height]=Screen('WindowSize', win); 
[x,y] = RectCenter(rect); 

% compute poly coordinates
polyWidth = 250;
polyHeight = 250;
xCoord = [x, x - (polyWidth/2), x, x + (polyWidth/2)]';
yCoord = [y + (polyHeight /2), y, y - (polyHeight /2), y]';
polyCoords = [xCoord yCoord];

Screen('FramePoly', win, [255 255 255], polyCoords, 3);
Screen('Flip', win);

KbWait;
sca; 

您可以使用以下函数对 psychtoolbox 绘制的图元进行转换:

Screen('glPushMatrix', windowPtr);
Screen('glPopMatrix', windowPtr);
Screen('glLoadIdentity', windowPtr);
Screen('glTranslate', windowPtr, tx, ty [, tz]);
Screen('glScale', windowPtr, sx, sy [, sz]);
Screen('glRotate', windowPtr, angle, [rx = 0], [ry = 0] ,[rz = 1]);

那你可以继续使用Screen('FrameRect')