Psychopy:blendMode 中的对比差

Psychopy: bad contrast in blendMode add

我在 psychopy 中使用 blendMode="add" - 不幸的是 GratingStim 对比度只有在 window 中没有绘制文本时才有效。绘制文本后 - GratingStims contrast 看起来好像从中减去 1(查看屏幕截图)。我在使用 avg blendMode 时没有遇到这个问题,但我确实需要 blendMode="add"

这是绘制文本之前 GratingStim 的样子:

这是绘制一些文本后的样子:

在将文本绘制到 window 后,任何后续的 GratingStim 都会像这样渲染对比度。只有打开另一个 window 有帮助。
我想这可以通过将一些着色器注入 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 和 8 上都有这个问题。

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

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

为什么这样可以解决问题,我不太确定。我通过查看 TextStim.draw 方法的源代码得出了这个猜测,在该方法中,对 GL 的一大堆调用是为 pyglet 而不是为 pygame.

执行的

好的,我的 猜测 是 pyglet 文本渲染器正在执行一些更改混合模式规则的代码,以便在绘制文本时其左侧处于错误状态。现在做

win.blendMode = 'add'

画完文字刺激后我的问题就解决了