OPENGL问题如何构建一个自编译文件,将立方体的顶点像素着色为黄色

问题描述 投票:0回答:1

OPENGL问题如何构建一个自编译文件,将立方体的顶点像素着色为黄色

您能帮我解决这个 Python 编译错误并提出一个有效的代码示例吗?

import pygame
import OpenGL
import OpenGL.GL as g1
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GL.shaders import compileProgram, compileShader
from OpenGL.GL import shaders

if bool(glCreateShader):
    shader = glCreateShader(GL_VERTEX_SHADER)
    # Continue with shader operations
else:
    print("glCreateShader is not available on this system.")

vertex_shader = """
#version 330 core
layout(location = 0) in vec3 in_position;
void main()
{
    gl_Position = vec4(in_position, 1.0);
}
"""

fragment_shader = """
#version 330 core
out vec4 frag_color;
void main()
{
    frag_color = vec4(1.0, 0.0, 0.0, 1.0);  // Red color
}
"""



vertices= (
    (1, -1, -1),
    (1, 1, -1),
    (-1, 1, -1),
    (-1, -1, -1),
    (1, -1, 1),
    (1, 1, 1),
    (-1, -1, 1),
    (-1, 1, 1)
    )

edges = (
    (0,1),
    (0,3),
    (0,4),
    (2,1),
    (2,3),
    (2,7),
    (6,3),
    (6,4),
    (6,7),
    (5,1),
    (5,4),
    (5,7)
    )

def Cube():
    glBegin(GL_LINES)
    for edge in edges:
        for vertex in edge:
            glVertex3fv(vertices[vertex])
    glEnd()

shader = shaders.compileShader(vertex_shader  , g1.GL_VERTEX_SHADER)

# Define vertex and fragment shaders here
vertex_shader_source = """
#version 330 core
layout(location = 0) in vec2 in_position;
void main() {
    gl_Position = vec4(in_position, 0.0, 1.0);
}
"""

fragment_shader_source = """
#version 330 core
uniform vec3 pixelColor;
out vec4 fragColor;
void main() {
    fragColor = vec4(pixelColor, 1.0);
}
"""



if __name__ == "__main__":
    
    vertex_shader = compileShader(vertex_shader_source, GL_VERTEX_SHADER)
    fragment_shader = compileShader(fragment_shader_source, GL_FRAGMENT_SHADER)
    shader_program = compileProgram(vertex_shader, fragment_shader)
    glUniform3f(glGetUniformLocation(shader_program, "pixelColor"), 1.0, 0.0, 0.0)
    pygame.init()
    display = (800,600)
    pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
    
    gluPerspective(45, (display[0]/display[1]), 0.1, 50.0)

    glTranslatef(0.0,0.0, -5)

    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()

        glRotatef(1, 3, 1, 1)
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
        Cube()
        pygame.display.flip()
        pygame.time.wait(10)

尝试调用未定义的备用函数(glCreateShader、glCreateShaderObjectARB),在调用之前检查 bool(glCreateShader)

python opengl pygame pyopengl
1个回答
0
投票

在创建 OpenGL 上下文之前,您无法调用 OpenGL 函数。当使用

pygame.display.set_mode
pyame.OPENGL
标志创建 OpenGL 窗口时,Pygame 会创建 OpenGL 上下文。因此,如果您在调用
pygame.display.set_mode
之前调用 OpenGL 函数,将会导致错误

© www.soinside.com 2019 - 2024. All rights reserved.