心理学:blendMode添加中的不良对比

时间:2015-08-24 13:57:59

标签: python opengl pyglet psychopy

我在心理上使用blendMode="add" - ufortunatelly GratingStim只有在窗口中没有绘制文本时,对比才有效。一旦绘制了文本 - 跟随GratingStims对比看起来好像从中减去了1(看一下截图)。我没有遇到avg blendMode这个问题,但我真的需要blendMode="add"

这是GratingStim在绘制文本之前的样子:
enter image description here
这是它绘制一些文字的方式:
enter image description here

在向窗口绘制文本之后,任何后面的GratingStim都会像这样呈现对比度。只打开另一个窗口有帮助 我想这可以通过向pyglet中注入一些着色器来解决,但我不知道该怎么做(related issue on github)。

以下代码重现了这个问题:

from psychopy import visual, event, core

win = visual.Window(monitor='testMonitor', useFBO=True,
    blendMode='add', units='deg')

g = visual.GratingStim(win, tex='sin', mask='gauss', size=4.5, pos=(0,6))
t = visual.TextStim(win=win, text='Hello blendMode="add"!')

draw_order = [[g], [g, t], [g, t]]
for draw_now in draw_order:
    for stim in draw_now:
        stim.draw()
    win.flip()
    event.waitKeys()

core.quit()

我正在使用Windows - 我在Windows 7和Windows 8上都存在这个问题。

2 个答案:

答案 0 :(得分:2)

好的,我的 guess 是pyglet文本渲染器正在执行一些改变blendmode规则的代码,这样当文本被绘制时,它的左边是错误的状态。现在正在做

win.blendMode = 'add'
在绘制文本刺激之后

为我解决了问题

答案 1 :(得分:0)

设置visual.Window(wynType='pygame')而不是默认winType='pyglet'。在您的示例中:

win = visual.Window(monitor='testMonitor', useFBO=True,
blendMode='add', units='deg', winType='pygame')

为什么这可以解决问题,我不完全确定。我通过查看TextStim.draw方法的源代码得出了这个猜测,其中对pyglet执行了一大堆GL调用,但没有为pygame执行。