2016-01-27 103 views
0

我是psychtoolbox的新手,尝试旋转/绘制框架方形的菱形/菱形,但无法完全弄清楚它是如何工作的。这里是我的代码: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],但它不工作。如果我想要菱形/菱形,不太确定如何指定[左,上,右,下]坐标。

感谢您的任何帮助。

回答

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; 
+0

谢谢!这对我帮助很大! – hanna

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')