我是openGL的新手。我想知道为什么功能Mutate GetPixelDifference()总是在glutPostRedisplay()之前被调用。我该如何修复它。
import sys
import time
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def GetPixelDifference():
print("calculate")
def Draw():
print("draw")
glClear(GL_COLOR_BUFFER_BIT)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_BLEND)
glColor4f(1.0, 1.0, 1.0, 0.4)
glPolygonMode(GL_FRONT, GL_FILL)
glBegin(GL_POLYGON)
glVertex2f(1,1)
glVertex2f(-1,1)
glVertex2f(0,0)
glEnd()
glFlush()
GetPixelDifference()
def Mutate():
print("mutate")
glutPostRedisplay()
#time.sleep(5)
print("=======")
print("=wrong=")
print("=======")
GetPixelDifference()
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(300, 300)
glutCreateWindow(b"My clock")
glutDisplayFunc(Draw)
print("main")
glutIdleFunc(Mutate)
glutMainLoop()
'''
And this is what i get
main
draw
calculate
mutate
=======
=wrong=
=======
calculate
draw
calculate
draw
'''
在绘制之前调用计算。但是我想在绘制完成时调用计算,因此这个计算是针对所有像素的。
答案 0 :(得分:1)
glutPostRedisplay只设置一个标志,在事件循环的 next 迭代中作为最终操作,应调用显示回调。即它不会立即采取行动。
这是记录在案的行为,请参阅:https://www.opengl.org/documentation/specs/glut/spec3/node20.html