
from OpenGL.GL import * from OpenGL.GLUT import *  from random import random  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)  glutInitWindowSize(300, 300)  glutInitWindowPosition(50, 50)  glutInit(sys.argv)  glutCreateWindow(b"Shaders!")  glutDisplayFunc(draw)  glutIdleFunc(draw)  glutSpecialFunc(specialkeys)  glClearColor(0.2, 0.2, 0.2, 1)  #    ( ,  ) def create_shader(shader_type, source): #     shader = glCreateShader(shader_type) #        glShaderSource(shader, source) #   glCompileShader(shader) #    return shader  #     #   -        vertex = create_shader(GL_VERTEX_SHADER, """ varying vec4 vertex_color; void main(){ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vertex_color = gl_Color; }""")  #      ""    fragment = create_shader(GL_FRAGMENT_SHADER, """ varying vec4 vertex_color; void main() { gl_FragColor = vertex_color; }""")  program = glCreateProgram()  glAttachShader(program, vertex) glAttachShader(program, fragment)  glLinkProgram(program)  glUseProgram(program)  pointdata = [[0, 0.5, 0], [-0.5, -0.5, 0], [0.5, -0.5, 0]]  pointcolor = [[1, 1, 0], [0, 1, 1], [1, 0, 1]]  glutMainLoop()  #     def specialkeys(key, x, y): #       pointcolor global pointcolor #    if key == GLUT_KEY_UP: #   glRotatef(5, 1, 0, 0) #   5    X if key == GLUT_KEY_DOWN: #   glRotatef(-5, 1, 0, 0) #   -5    X if key == GLUT_KEY_LEFT: #   glRotatef(5, 0, 1, 0) #   5    Y if key == GLUT_KEY_RIGHT: #   glRotatef(-5, 0, 1, 0) #   -5    Y if key == GLUT_KEY_END: #  END #   pointcolor     0-1 pointcolor = [[random(), random(), random()], [random(), random(), random()], [random(), random(), random()]]  glClear(GL_COLOR_BUFFER_BIT)  glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_COLOR_ARRAY)  glVertexPointer(3, GL_FLOAT, 0, pointdata)  glColorPointer(3, GL_FLOAT, 0, pointcolor)  glDrawArrays(GL_TRIANGLES, 0, 3)  glDisableClientState(GL_VERTEX_ARRAY) glDisableClientState(GL_COLOR_ARRAY) glutSwapBuffers()  # -*- coding: utf-8 -*- #    : from OpenGL.GL import * from OpenGL.GLUT import * #import sys #   random    random from random import random #   pointcolor  (    ) global pointcolor #     def specialkeys(key, x, y): #       pointcolor global pointcolor #    if key == GLUT_KEY_UP: #   glRotatef(5, 1, 0, 0) #   5    X if key == GLUT_KEY_DOWN: #   glRotatef(-5, 1, 0, 0) #   -5    X if key == GLUT_KEY_LEFT: #   glRotatef(5, 0, 1, 0) #   5    Y if key == GLUT_KEY_RIGHT: #   glRotatef(-5, 0, 1, 0) #   -5    Y if key == GLUT_KEY_END: #  END #   pointcolor     0-1 pointcolor = [[random(), random(), random()], [random(), random(), random()], [random(), random(), random()]] #    ( ,  ) def create_shader(shader_type, source): #     shader = glCreateShader(shader_type) #        glShaderSource(shader, source) #   glCompileShader(shader) #    return shader #   def draw(): glClear(GL_COLOR_BUFFER_BIT) #       glEnableClientState(GL_VERTEX_ARRAY) #     glEnableClientState(GL_COLOR_ARRAY) #     # ,    : #   -       #   -        #   -       #      ,   0 #   -         glVertexPointer(3, GL_FLOAT, 0, pointdata) # ,    : #  ,     glColorPointer(3, GL_FLOAT, 0, pointcolor) #      : #   -     (, ,   .) #   -      #   -    (    3  - 9 ) glDrawArrays(GL_TRIANGLES, 0, 3) glDisableClientState(GL_VERTEX_ARRAY) #     glDisableClientState(GL_COLOR_ARRAY) #     glutSwapBuffers() #        #     #        RGB (  ) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB) #     (, ) glutInitWindowSize(300, 300) #   #        glutInitWindowPosition(50, 50) #  OpenGl glutInit(sys.argv) #     "Shaders!" glutCreateWindow(b"Shaders!") #  ,    glutDisplayFunc(draw) #  ,   ""  glutIdleFunc(draw) #  ,     glutSpecialFunc(specialkeys) #       glClearColor(0.2, 0.2, 0.2, 1) #   : #     #   -        vertex = create_shader(GL_VERTEX_SHADER, """ varying vec4 vertex_color; void main(){ gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; vertex_color = gl_Color; }""") #   : #      ""    fragment = create_shader(GL_FRAGMENT_SHADER, """ varying vec4 vertex_color; void main() { gl_FragColor = vertex_color; }""") #      program = glCreateProgram() # c     glAttachShader(program, vertex) #      glAttachShader(program, fragment) # ""   glLinkProgram(program) #  OpenGL          glUseProgram(program) #    (    ) pointdata = [[0, 0.5, 0], [-0.5, -0.5, 0], [0.5, -0.5, 0]] #    (     ) pointcolor = [[1, 1, 0], [0, 1, 1], [1, 0, 1]] #    glutMainLoop() 


Source: https://habr.com/ru/post/247123/
All Articles