0

我是 psychtoolbox 的新手,并试图将我的框架正方形旋转/绘制成菱形/菱形,但无法完全弄清楚它是如何工作的。这是我的代码:

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],但它不起作用。如果我想要菱形/菱形,不太确定如何指定 [left, top, right, bottom] 坐标。

谢谢你的帮助。

4

2 回答 2

0

您可以使用以下函数转换 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')

于 2016-04-16T20:23:29.070 回答
0

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; 
于 2016-01-27T05:02:30.703 回答