【发布时间】:2021-07-17 11:08:59
【问题描述】:
我是 PyOpenGL 的新手,我正在尝试将着色器添加到实时摄像机镜头中。
素材正在正确显示,并且着色器(因为其中还没有任何内容而被注释掉)也在工作。
问题是我不知道如何在片段着色器中显示相机纹理。有人可以帮忙吗?
初始化:
def init():
#glclearcolor (r, g, b, alpha)
glClearColor(0.0, 0.0, 0.0, 1.0)
glutDisplayFunc(display)
glutReshapeFunc(reshape)
glutKeyboardFunc(keyboard)
glutIdleFunc(idle)
fragmentShader = compileShader(getFileContent("shader.frag"), GL_FRAGMENT_SHADER)
global shaderProgram
shaderProgram = glCreateProgram()
glAttachShader(shaderProgram, fragmentShader)
glLinkProgram(shaderProgram)
#glUseProgram(shaderProgram) SHADER HAS NOTHING IN IT
重复每一帧
def idle():
# capture next frame
global capture
_, image = capture.read()
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.flip(image, -1)
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGB,
1280, 720,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
image)
cv2.imshow('frame', image)
glutPostRedisplay()
def display():
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glEnable(GL_TEXTURE_2D)
# this one is necessary with texture2d for some reason
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
# Set Projection Matrix
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluOrtho2D(0, width, 0, height)
# Switch to Model View Matrix
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
# Draw textured Quads
glBegin(GL_QUADS)
glTexCoord2f(0.0, 0.0)
glVertex2f(0.0, 0.0)
glTexCoord2f(1.0, 0.0)
glVertex2f(width, 0.0)
glTexCoord2f(1.0, 1.0)
glVertex2f(width, height)
glTexCoord2f(0.0, 1.0)
glVertex2f(0.0, height)
glEnd()
glFlush()
glutSwapBuffers()
【问题讨论】:
-
"[...] 我不知道如何在片段着色器中显示相机纹理 [...]" - 那么您的片段着色器在哪里?
-
它在另一个文件中,这里是shader.frag:#version 120 void main() { //gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); }
标签: python opengl glsl fragment-shader pyopengl