PyOpenGL 无法渲染任何 vao

问题描述

我花了将近 2-3 个小时试图弄清楚为什么我没有得到矩形渲染。我使用 pygame 制作窗口,使用 opengl 渲染到窗口上。

应该发生的是带有蓝色矩形的红色背景,但我看到的只是空的红色背景。

这是我在下面使用的代码。

我上传东西到着色器错了吗?或者我错过了什么。

import pygame
from pygame.locals import *
from OpenGL.GL import * 
from OpenGL.GLU import * 
import numpy as np
print("import sucessfull")

vertex = """
#version 460 core
layout (location=0) in vec3 position;

out vec4 fColor;

void main(){
    fColor = vec4(0,1,1);
    gl_Position = vec4(position,1.0);
}
"""
fragment = """
#version 460 core
in vec4 fColor;
out vec4 color;
void main(){
    color = fColor;
    //gl_FragColor = fColor;
}
"""

def main():
    clock = pygame.time.Clock()
    pygame.init()
    display  = (800,600)
    pygame.display.set_mode(display,DOUBLEBUF | OPENGL)
    gluPerspective(45,(display[0]/display[1]),0.1,1000)
    glClearColor(1,1)
    glTranslatef(0,-5)

    #############################3
    vertexID = glCreateShader(GL_VERTEX_SHADER)
    glShaderSource(vertexID,vertex)
    fragmentID = glCreateShader(GL_FRAGMENT_SHADER)
    glShaderSource(fragmentID,fragment)
    glCompileShader(vertexID)
    glCompileShader(fragmentID)
    program = glCreateProgram()
    glAttachShader(program,vertexID)
    glAttachShader(program,fragmentID)
    glLinkProgram(program)

    positions = [
        0.5,-0.5,0.0,0.5,0.0
    ]
    indexes = [
        2,3
    ]
    vao = glGenVertexArrays(1)
    glBindVertexArray(vao)
    vbo = glGenBuffers(1)
    glBindBuffer(GL_ARRAY_BUFFER,vbo)
    glBufferData(GL_ARRAY_BUFFER,np.array(positions,dtype=np.float32),GL_STATIC_DRAW)

    ebo = glGenBuffers(1)
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ebo)
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,np.array(indexes,GL_STATIC_DRAW)

    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,12,0)
    glEnableVertexAttribArray(0)
    ################################

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        #render here
        glUseProgram(program)
        glBindVertexArray(vao)
        glEnableVertexAttribArray(0)
        glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0)
        glDisableVertexAttribArray(0)
        glBindVertexArray(0)
        glUseProgram(0)
        #***********
        pygame.display.flip()
        clock.tick(40)

main()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)