poster
2019-12-10, 16:49
更新:这似乎只是某些计算机上的问题。正常,直观的代码似乎可以在我的家用计算机上正常工作,但是工作中的计算机有麻烦。
家用电脑:(没有问题)
Windows XP专业版SP3
AMD Athlon 64 X2 3800+双核2.0 GHz
NVIDIA GeForce 7800 GT
2 GB内存
工作计算机:(此问题适用于此计算机)
Windows XP专业版SP3
英特尔奔腾4 2.8 Ghz(我认为是双核)
英特尔82945G Express芯片组家族
1 GB内存
原始帖子:
我正在尝试使用Matlab中的Psychtoolbox通过以下代码将非常简单的纹理应用于屏幕的一部分:
win = Screen('OpenWindow', 0, 127); % open window and obtain window pointer tex = Screen('MakeTexture', win, [255 0;0 255]); % get texture pointer % draw texture. Args: command, window pointer, texture pointer, source % (ie the entire 2x2 matrix), destination (a 100x100 square), rotation % (none) and filtering (nearest neighbour) Screen('DrawTexture', win, tex, [0 0 2 2], [100 100 200 200], 0, 0); Screen('Flip', win); % flip the buffer so the texture is drawn KbWait; % wait for keystroke Screen('Close', win); % close screen 现在,我希望看到这个(四个相等大小的正方形):
https://i.stack.imgur.com/prDb5.png (https://i.stack.imgur.com/prDb5.png)
但是我得到了这个(右侧和底部被切除,左上角的正方形太大):
https://i.stack.imgur.com/ztuqH.png (https://i.stack.imgur.com/ztuqH.png)
显然,目标矩形比源矩形大很多,因此需要放大纹理。我希望这会像第一张图片一样对称地发生,这也是我所需要的。为什么这没有发生,我该怎么办?
我还尝试使用[128 0 1152 1024]作为目标矩形(因为它是屏幕中心的正方形)。在这种情况下,所有边都是1024,这使每个涉及的矩形的2的幂。这无济于事。增大棋盘格大小会导致类似的情况,其中最右边和最下面的一侧无法正确显示。
就像我说的,我使用Psychtoolbox,但我知道它在后台使用了OpenGL。我对OpenGL也不太了解,但是也许有人会在不了解Matlab的情况下提供帮助。我不知道。
谢谢你的时间!
回答:
在不了解Psychtoolbox的情况下,但是在MATLAB中处理了很多图形和用户界面之后,我要做的第一件事就是摆弄Screen的第四个输入(“源”输入)。尝试将每个角移动半像素和整个像素值。例如,我要尝试的第一件事是:
Screen('DrawTexture', win, tex, [0 0 2.5 2.5], [100 100 200 200], 0, 0); 如果那似乎什么都没做,那么我接下来尝试:
Screen('DrawTexture', win, tex, [0 0 3 3], [100 100 200 200], 0, 0); 我提出此建议的理由:我有时注意到图中的图像或GUI控件看起来好像有一个像素偏移,我只能推测是在缩放或定位它们时存在某种舍入误差。
那是我能给的最好的建议。希望能帮助到你!
更多&回答... (https://stackoverflow.com/questions/798992)
家用电脑:(没有问题)
Windows XP专业版SP3
AMD Athlon 64 X2 3800+双核2.0 GHz
NVIDIA GeForce 7800 GT
2 GB内存
工作计算机:(此问题适用于此计算机)
Windows XP专业版SP3
英特尔奔腾4 2.8 Ghz(我认为是双核)
英特尔82945G Express芯片组家族
1 GB内存
原始帖子:
我正在尝试使用Matlab中的Psychtoolbox通过以下代码将非常简单的纹理应用于屏幕的一部分:
win = Screen('OpenWindow', 0, 127); % open window and obtain window pointer tex = Screen('MakeTexture', win, [255 0;0 255]); % get texture pointer % draw texture. Args: command, window pointer, texture pointer, source % (ie the entire 2x2 matrix), destination (a 100x100 square), rotation % (none) and filtering (nearest neighbour) Screen('DrawTexture', win, tex, [0 0 2 2], [100 100 200 200], 0, 0); Screen('Flip', win); % flip the buffer so the texture is drawn KbWait; % wait for keystroke Screen('Close', win); % close screen 现在,我希望看到这个(四个相等大小的正方形):
https://i.stack.imgur.com/prDb5.png (https://i.stack.imgur.com/prDb5.png)
但是我得到了这个(右侧和底部被切除,左上角的正方形太大):
https://i.stack.imgur.com/ztuqH.png (https://i.stack.imgur.com/ztuqH.png)
显然,目标矩形比源矩形大很多,因此需要放大纹理。我希望这会像第一张图片一样对称地发生,这也是我所需要的。为什么这没有发生,我该怎么办?
我还尝试使用[128 0 1152 1024]作为目标矩形(因为它是屏幕中心的正方形)。在这种情况下,所有边都是1024,这使每个涉及的矩形的2的幂。这无济于事。增大棋盘格大小会导致类似的情况,其中最右边和最下面的一侧无法正确显示。
就像我说的,我使用Psychtoolbox,但我知道它在后台使用了OpenGL。我对OpenGL也不太了解,但是也许有人会在不了解Matlab的情况下提供帮助。我不知道。
谢谢你的时间!
回答:
在不了解Psychtoolbox的情况下,但是在MATLAB中处理了很多图形和用户界面之后,我要做的第一件事就是摆弄Screen的第四个输入(“源”输入)。尝试将每个角移动半像素和整个像素值。例如,我要尝试的第一件事是:
Screen('DrawTexture', win, tex, [0 0 2.5 2.5], [100 100 200 200], 0, 0); 如果那似乎什么都没做,那么我接下来尝试:
Screen('DrawTexture', win, tex, [0 0 3 3], [100 100 200 200], 0, 0); 我提出此建议的理由:我有时注意到图中的图像或GUI控件看起来好像有一个像素偏移,我只能推测是在缩放或定位它们时存在某种舍入误差。
那是我能给的最好的建议。希望能帮助到你!
更多&回答... (https://stackoverflow.com/questions/798992)